PHP Conference Nagoya 2025

Альтернативный синтаксис управляющих структур

(PHP 4, PHP 5, PHP 7, PHP 8)

PHP предлагает альтернативный синтаксис для отдельных управляющих структур языка, а точнее: if, while, for, foreach и switch. Для каждой управляющей структуры базовую форму альтернативного синтаксиса получают путём изменения открывающей фигурной скобки на двоеточие :, а закрывающей — на инструкцию, которая соответствует названию структуры: endif;, endwhile;, endfor;, endforeach; или endswitch;.

<?php if ($a == 5): ?>
A равно 5
<?php endif; ?>

В приведённом примере, HTML-блок "A равно 5" вложили в конструкции if, которую записали альтернативным синтаксисом. Блок HTML-разметки отобразится, только если переменная $a равна 5.

Альтернативный синтаксис также применяется к конструкциям else и elseif. Следующий пример показывает структуру конструкции if с конструкциями elseif и else в альтернативном формате:

<?php

if ($a == 5):
echo
"Значение переменной $a равно 5";
echo
"...";
elseif (
$a == 6):
echo
"Значение переменной $a равно 6";
echo
"!!!";
else:
echo
"Значение переменной $a не равно ни 5, ни 6";
endif;

?>

Замечание:

Смешивание синтаксиса в одном и том же блоке управления не поддерживается.

Внимание

Любой вывод, включая пробельные символы, между инструкцией switch и первой инструкцией case вызовет синтаксическую ошибку. Например, следующий синтаксис недопустим:

<?php switch ($foo): ?>
<?php case 1: ?>
...
<?php endswitch; ?>

При этом следующий пример содержит допустимый код, поскольку завершающий символ новой строки после инструкции switch PHP рассматривает как часть закрывающего тега ?> и поэтому между инструкциями switch и case ничего не выводится:

<?php switch ($foo): ?>
<?php
case 1: ?>
...
<?php endswitch; ?>

Дополнительные примеры приводят страницы описания циклов while и for, и конструкци if.

Добавить

Примечания пользователей 1 note

up
27
toxyy
2 years ago
I feel compelled to give a more elegant way using heredoc than the other comment:

<ul>
<?php foreach($list as $item): echo
<<<ITEM
<li id="itm-$item[number]">Item $item[name]</li>
ITEM;
endforeach;
?>
</ul>

Which works better with multi line blocks, as you only need one overall php tag.

(please don't omit the closing </li> tag despite it being legal, personal preference)
To Top