Как использовать A? X: Y синтаксис с heredoc в PHP?

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

<?php

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

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

4 ответа

Нету. К сожалению, интерполяция строк в 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 как любую половину троичного. Как : / в другом случае,

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

и если вы не возражаете против синтаксиса авангарда, как ? / если дело:

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

Для ? / в случае, закрывающий разделитель heredoc (INPUT) должен быть на своей линии; : Отступы для ясности.

Другие вопросы по тегам