Как использовать А? x: y синтаксис с heredoc в PHP?

Я пробовал это, но получил только синтаксическую ошибку:

<?php

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

Можно ли использовать такой условный оператор внутри heredoc?


person wamp    schedule 10.06.2010    source источник


Ответы (4)


Неа. К сожалению, интерполяция строк в PHP не такая уж надежная. Вам придется либо объединить две строки, либо заранее назначить эту небольшую логику другой переменной.

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

Я бы сказал нет.

См. Соответствующий вопрос о том, почему вы не можете выполнять вызовы функций и возможные обходные пути: Вызов функций PHP в строках HEREDOC

Суть в том, что вам, вероятно, придется назначить тернарный оператор переменной перед heredoc.

person Matt Mitchell    schedule 10.06.2010

Вы можете сделать что-то вроде этого:

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

$str = <<<EOF
{$values[$a]}
EOF;
person Jimmer303    schedule 12.12.2011

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) действительно должен находиться на отдельной строке; отступ : предназначен для ясности.

person Honore Doktorr    schedule 28.06.2016