5

我试过了,但只有一个语法错误:

<?php

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

是否可以在 heredoc 中使用这种条件语句?

4

4 回答 4

8

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

<?php
$a = true;
$b = $a ? 1 : 2;
$str = <<<EOF
Hello, world! The number of the day is: $b
EOF;
echo $str;
于 2010-06-10T04:11:34.070 回答
2

我会说不。

请参阅有关为什么不能进行函数调用和可能的解决方法的相关问题:在 HEREDOC 字符串中调用 PHP 函数

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

于 2010-06-10T04:11:54.327 回答
2

你可以这样做:

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

$str = <<<EOF
{$values[$a]}
EOF;
于 2011-12-12T15:19:04.287 回答
2

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
                               : "";

对于?/if 情况,heredoc 的结束分隔符 ( INPUT)确实需要单独一行;的:缩进是为了清楚起见。

于 2016-06-28T19:08:50.273 回答