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 и его альтернативная запись будут рассмотрены позднее, а именно во время изучения массивов и объектов.
С этой темой смотрят: