如何使用A? PHP 中带有 Heredoc 的 x:y 语法?

发布于 2024-09-05 05:23:25 字数 209 浏览 2 评论 0原文

我尝试了这个,但只得到了一个语法错误:

<?php

$a = true;
$str = <<< EOF
{$a ? 1 : 2}
EOF;
echo $str;

Is it possible to use such kind of conditional statements inside heredoc?

I tried this but only got a syntax error:

<?php

$a = true;
$str = <<< EOF
{$a ? 1 : 2}
EOF;
echo $str;

Is it possible to use such kind of conditional statement inside heredoc?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

和我恋爱吧 2024-09-12 05:23:25

没有。不幸的是,PHP 字符串插值并不是那么健壮。您要么必须连接两个字符串,要么提前将这一点逻辑分配给另一个变量。

<?php
$a = true;
$b = $a ? 1 : 2;
$str = <<<EOF
Hello, world! The number of the day is: $b
EOF;
echo $str;

Nope. PHP string interpolation is, unfortunately, not quite that robust. You'll either have to concatenate two strings, or assign that little bit of logic to another variable ahead of time.

<?php
$a = true;
$b = $a ? 1 : 2;
$str = <<<EOF
Hello, world! The number of the day is: $b
EOF;
echo $str;
九公里浅绿 2024-09-12 05:23:25

我会说不。

请参阅此相关问题,了解为什么无法执行函数调用和可能的解决方法:调用 PHP 函数在 HEREDOC 字符串内

关键在于您可能必须将三元运算符分配给定界符之前的变量。

I would say no.

See this related question on why you can't do function calls and possible workarounds: Calling PHP functions within HEREDOC strings

The crux of it is that you will probably have to assign your ternary operator to a variable before the heredoc.

樱娆 2024-09-12 05:23:25

你可以这样做:

$values = array('1', '2');

$str = <<<EOF
{$values[$a]}
EOF;

You could do something like this:

$values = array('1', '2');

$str = <<<EOF
{$values[$a]}
EOF;
巨坚强 2024-09-12 05:23:25

FWIW,您可以使用heredocs作为三元组的任意一半。如 :/else 情况,

$optional_input = empty($name) ? "" : <<<INPUT
<input type="hidden" name="name" value="$name" />
INPUT;

如果您不介意前卫语法,则如 ?/if 情况:

$optional_input = isset($name) ? <<<INPUT
<input type="hidden" name="name" value="$name" />
INPUT
                               : "";

对于 ?/如果是这种情况,则此处文档的结束分隔符 (INPUT) 确实 需要独占一行; : 的缩进是为了清晰起见。

FWIW you can use heredocs as either half of a ternary. As the :/else case,

$optional_input = empty($name) ? "" : <<<INPUT
<input type="hidden" name="name" value="$name" />
INPUT;

and if you don't mind avant garde syntax, as the ?/if case:

$optional_input = isset($name) ? <<<INPUT
<input type="hidden" name="name" value="$name" />
INPUT
                               : "";

For the ?/if case, the heredoc's closing delimiter (INPUT) does need to be on its own line; the :'s indentation is for clarity.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文