Материал предоставлен https://it.rfei.ru

Многострочные команды

Бывает, что нужно вывести из РНР большой объем текста, а использование нескольких инструкций echo (или print) заняло бы много времени и было неразумным. РНР предлагает два удобных средства, предназначенных для того, чтобы справиться с подобной ситуацией. Первое из них состоит в заключении в кавычки нескольких строк, как в этом примере.

Пример. Инструкция echo, использующая несколько строк

<?php
$author = "Альфред Ньюмен";
echo "Это заголовок
Это первая строка.
Это вторая строка.
Автор $author.";
?>

Переменным также можно присвоить значения способом, показанным в следующем примере.

Пример. Многострочное присваивание

<?php
$author = "Альфред Ньюмен";
$text = "Это заголовок
Это первая строка.
Это вторая строка.
Автор $author.";
?>

В РНР можно также воспользоваться многострочной последовательностью, используя оператор <<<, который обычно называют here-document (здесь документ) или, для краткости, heredoc. Этот оператор представляет собой способ указания строкового литерала, сохраняющего в тексте обрывы строк и другие пустые пространства (включая отступы). Его использование показано в приведенном ниже примере.

Пример. Еще один вариант инструкции echo, использующей сразу несколько строк

<?php
$author = "Альфред Ньюмен";
echo <<<_END
Это заголовок
Это первая строка.
Это вторая строка.
- Автор $author.
_END;
?>

Этот код предписывает РНР вывести все, что находится между двумя тегами _END, как будто все это является строкой, заключенной в двойные кавычки. Это означает, что разработчику можно, к примеру, написать целый раздел HTML-кода прямо в коде РНР, а затем заменить конкретные динамические части переменными РНР.

Важно запомнить, что закрывающий тег _END; должен появляться строго в начале новой строки и он должен быть единственным содержимым этой строки — к ней не разрешается добавлять даже комментарии (нельзя ставить даже одиночный пробел). Как только многострочный блок закрыт, можно снова воспользоваться тем же самым именем тега.

Запомните: используя heredoc-конструкцию <<<_END..._END;, вы не должны добавлять символы \n, для того чтобы отправить команду на перевод строки, достаточно просто нажать клавишу Ввод и приступить к набору новой строки. Также, в отличие от других строк, заключенных в одинарные или двойные кавычки, внутри конструкции heredoc можно по своему усмотрению совершенно свободно пользоваться всеми одинарными или двойными кавычками, не изменяя их первоначального предназначения с помощью ведущего символа обратного слеша (\).

В примере показано, как использовать этот же синтаксис для присваивания переменной многострочного значения.

Пример. Присваивание переменной многострочного значения

 <?php
$author = "Альфред Ньюмен";
$out = <<<_END
Это заголовок
Это первая строка.
Это вторая строка.
- Автор $author.
_END:
?>

После этого переменная $out будет наполнена содержимым, размещенным между двумя тегами. Если не присваивать, а добавлять значение, то для добавления строки к значению переменной $out вместо оператора = можно воспользоваться оператором .=.

Будьте внимательны, не ставьте точку с запятой сразу же за первым тегом _END, поскольку она прервет многострочный блок еще до его начала и вызовет сообщение об ошибке синтаксического разбора — «Parse еrrоr». Точку с запятой нужно ставить только после закрывающего тега END, хотя внутри блока можно свободно пользоваться точкой с запятой как обычным текстовым символом.

Кстати, тег _END — лишь один из многих, он выбран для этих примеров, поскольку его использование где-нибудь еще в коде РНР маловероятно, что придает ему некоторую уникальность. Но вы можете использовать по собственному усмотрению любой тег, например _SECTION1 или _OUTPUT и т. д. И еще, для того чтобы отличать подобные теги от переменных или функций, обычно практикуется ставить в начале их имени знак подчеркивания, но если не хотите, можете им не пользоваться.

Многострочную разметку текста можно рассматривать как удобное средство, упрощающее чтение вашего кода РНР, поскольку, как только текст отображается на веб-странице, вступают в силу правила форматирования HTML и пустые пространства скрываются, но имя переменной $author по-прежнему заменяется ее значением в соответствии с правилами вставки значений переменных.

Изменение предназначения символовТипы переменных