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

(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 считается частью закрывающего ?> и следовательно ничего не выводится между switch и case:

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

Смотрите также while, for и if для дальнейших примеров.

add a note

User Contributed Notes 2 notes

up
10
toxyy
1 year 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)
up
-1
albaash247 at gmail dot com
1 month ago
i was wondering which solution is better (using heredoc or Alternative syntax). Anyway, you can use heredoc to populate data like this:

<?php
function printUsers()
{
require_once
'../API/get-users.php';

foreach (
getResponse() as $user) {
$template = <<<HTML
<tr id="userRowTemplate">
<th id="txtUserId" scope="row" >
$user[id]</th>
<td id="txtUserFullName">
$user[full_name]</td>
<td id="txtUserEmail">
$user[email]</td>
<td id="action">
<button id="btnEnable">Enable</button>
<button id="btnDisable">Disable</button>
</td>
</tr>
HTML;

echo
$template;
}
}

?>
To Top