Альтернативный синтаксис управляющих структур
(PHP 4, PHP 5, PHP 7)
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 считается частью закрывающего ?> и следовательно ничего не выводится между switch и case:
<?php switch ($foo): ?>
<?php case 1: ?>
...
<?php endswitch ?>
Коментарии
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)