Я пробовал это, но получил только синтаксическую ошибку:
<?php
$a = true;
$str = <<< EOF
{$a ? 1 : 2}
EOF;
echo $str;
Можно ли использовать такой условный оператор внутри heredoc?
Я пробовал это, но получил только синтаксическую ошибку:
<?php
$a = true;
$str = <<< EOF
{$a ? 1 : 2}
EOF;
echo $str;
Можно ли использовать такой условный оператор внутри heredoc?
Неа. К сожалению, интерполяция строк в PHP не такая уж надежная. Вам придется либо объединить две строки, либо заранее назначить эту небольшую логику другой переменной.
<?php
$a = true;
$b = $a ? 1 : 2;
$str = <<<EOF
Hello, world! The number of the day is: $b
EOF;
echo $str;
Я бы сказал нет.
См. Соответствующий вопрос о том, почему вы не можете выполнять вызовы функций и возможные обходные пути: Вызов функций PHP в строках HEREDOC
Суть в том, что вам, вероятно, придется назначить тернарный оператор переменной перед heredoc.
Вы можете сделать что-то вроде этого:
$values = array('1', '2');
$str = <<<EOF
{$values[$a]}
EOF;
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
) действительно должен находиться на отдельной строке; отступ :
предназначен для ясности.