HEREDOCS - единственный практичный выбор многострочного текстового построения такого рода. Ваши единственные другие варианты - это построчное объединение или «выход» из режима PHP и использование некоторой буферизации вывода.
$text = "blah blah blah";
$text .= "blah blah blah";
$text .= "blah blah blah";
ob_start(); ?>
blah blah blah
blah blah blah
blah blah blah
<? $text = ob_get_clean();
$text = <<<EOL
blah blah blah
blah blah blah
blah blah blah
EOL;
Из 3-х heredocs гораздо полезнее. Вам не нужно беспокоиться о экранировании кавычек в текстовом теле, а с переменными функциями вы можете даже выполнять вызовы функций в тексте сейчас, чтобы выполнять такие вещи, как htmlspecialchars()
вызовы, без необходимости предварительно определять любой такой текст за пределами heredoc. блок.
$formfield = htmlspecialchars($_POST['somefield']);
$txt = <<<EOL
<input type="text" value="$formfield" />
EOL;
против
$hsc = function($x) { return htmlspecialchars($x); };
$txt = <<<EOL
<input type="text" value="{$hsc($_POST['somefield'])}" />
EOL;
комментарий:
Ничто не говорит, что вы не можете объединить heredocs:
$txt = <<<EOL
blah blah blah
EOL;
$txt .= <<<EOL
more blah
EOL;
В конце концов, heredoc просто создает строку, в которой есть несколько строк текста. Вы можете разбить монолитный одиночный heredoc на две или более секций и поместить ваши условные if()
вещи между ними.
С другой стороны, с помощью переменных функций вы можете тривиально перехватить одну из них, чтобы вставить условный текст в один heredoc:
$conditional = function($parameter) { return (($parameter == 1) ? 'Success' : 'Failure'); }
$txt = <<EOL
Your login attempt
resulted in {$conditional($somevalue)}.
How does that make you feel?
EOL;
* 1023 смотри выше *
$txt = <<<EOL
Your login attemp
resulted in
EOL;
$txt .= (($somevalue == 1) ? 'Success' : 'Failure');
$txt .= <<<EOL
.
How does that make you feel?
EOL;