Как использовать A? Синтаксис X: Y с heredoc в PHP? - PullRequest
3 голосов
/ 10 июня 2010

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

<?php

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

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

Ответы [ 4 ]

4 голосов
/ 10 июня 2010

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

<?php
$a = true;
$b = $a ? 1 : 2;
$str = <<<EOF
Hello, world! The number of the day is: $b
EOF;
echo $str;
2 голосов
/ 12 декабря 2011

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

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

$str = <<<EOF
{$values[$a]}
EOF;
2 голосов
/ 10 июня 2010

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

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

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

1 голос
/ 28 июня 2016

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

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

...