PHP: Альтернативный синтаксис управляющих конструкций
PHP поддерживает альтернативный синтаксис для некоторых управляющих конструкций, а именно для: if, switch, while, for
и foreach
. Основная форма альтернативного синтаксиса заключается в замене открывающей фигурной скобки на двоеточие (:
), завершающая фигурная скобка заменяется на ключевое слово endif, endswitch, endwhile, endfor
и endforeach
, которое соответствует используемой конструкции.
if
При использовании в управляющих конструкциях альтернативного синтаксиса, фигурные скобки не ставятся, даже если используется несколько инструкций. После условия ставится двоеточие, после которого указывается одна или более инструкций, в самом конце, для указания завершения общей конструкции используется ключевое слово endif
.
<?php $a = 4; $b = 3; if ($a > $b): echo $a . " больше"; echo ", чем " . $b; elseif ($a == $b): // Обратите внимание, здесь elseif записан в одно слово. echo $a." равно ".$b; else: echo $a." меньше ".$b; endif; ?>
Замечание: если для определения нескольких условий if/elseif
используется альтернативный синтаксис, в этом случае можно использовать только elseif
в одно слово, т.е. вы не должны разделять else if
в два слова, так как это вызовет фатальную ошибку в PHP.
<?php /* Этот код вызовет ошибку: */ if ($a > $b): echo $a." больше, чем ".$b; else if ($a == $b): echo $a." равно ".$b; endif; ?>
Смешивание двух видов синтаксиса в одной конструкции не поддерживается, это правило относится ко всем операторам указанных в этой главе.
<?php /*Этот код не будет работать*/ if($a > $b): echo $a . " больше"; echo ", чем " . $b; elseif ($a == $b) { // нельзя смешивать два вида записей в одной конструкции echo $a." равно ".$b; } else: echo $a." меньше ".$b; endif; ?>
Правила альтернативного синтаксиса описанные в этом разделе также действуют и для остальных управляющих структур. Поэтому ниже будут просто приведены примеры.
switch
<?php $num = 2; switch ($num): case 0: echo "\$num равно 0"; break; case 1: echo "\$num равно 1"; break; case 2: echo "\$num равно 2"; break; default: echo "\$num не равно 0, 1 или 2"; endswitch; ?>
while
<?php $num = 5; while ($num--): echo "$num<br>"; endwhile; ?>
for
<?php for ($k = 1; $k <= 10; $k++): echo "$k "; endfor; // пример с вложенным циклом for ($i = 0; $i < 4; $i++): echo "Внешний цикл.<br>"; for ($j = 0; $j < 2; $j++): echo "Вложенный цикл.<br>"; endfor; //вложенные конструкции тоже надо завершать ключевым словом endfor; ?>
Обратите внимание, для вложенных конструкций, может применяться и синтаксис включающий фигурные скобки, но так делать не рекомендуется, так как это снижает читаемость кода.
<?php for ($i = 0; $i < 4; $i++): echo "Внешний цикл.<br>"; for ($j = 0; $j < 2; $j++) { echo "Вложенный цикл.<br>"; } endfor; ?>
Дополнительные сведения
Теперь рассмотрим вопрос о том, когда лучше использовать альтернативный синтаксис, а заодно вы узнаете, как еще можно использовать управляющие конструкции.
Приведем простой пример:
<?php if ($a == 5): ?> <p>A равно 5</p> <?php endif; ?>
В приведенном примере, блок HTML-кода "A равно 5"
вложен внутрь конструкции if
написанной с альтернативным синтаксисом. HTML-блок будет показан только в том случае, если переменная $a
будет равна 5
.
Как вы уже могли догадаться из примера выше, альтернативный синтаксис можно использовать для вставок в HTML-разметку. Так как в этом случае код php и html будут разделены, это упрощает верстку страницы.
Рассмотрим примеры для других конструкций:
<ul> <!-- использование конструкции for--> <?php for ($items = 1; $items <= 10; $items++): ?> <li><?php echo $items ?></li> <?php endfor; ?> </ul> <ul> <!--тоже самое, но с использованием конструкции while--> <?php $items = 1; while ($items <= 10): ?> <li><?php echo $items ?></li> <?php $items++; endwhile; ?> </ul> <!--использование конструкции switch--> <?php switch ($item): case 1: ?> <p>Значение равно 1.</p> <?php break; ?> <?php default: ?> <p>Значение не известно.</p> <?php endswitch; ?>
Конечно не обязательно использовать представленный синтаксис, можно пользоваться и стандартной записью, с использованием фигурных скобок, но в этом случае код будет менее читабельным.
<?php if ($a == 5) { ?> <p>A равно 5</p> <?php } else { ?> <p>A не равно 5</p> <?php } ?>
Синтаксис оператора foreach
и его альтернативная запись будут рассмотрены позднее, а именно во время изучения массивов и объектов.
С этой темой смотрят: