endswitch
Оператор endswitch завершает блок switch в PHP при использовании альтернативного синтаксиса с двоеточием вместо фигурных скобок.
Введение
endswitch закрывает оператор switch, написанный в альтернативном синтаксисе PHP — той форме, которая заменяет открывающую фигурную скобку { двоеточием :, а закрывающую скобку } — ключевым словом endswitch;. Это не отдельная языковая конструкция, а закрывающий разделитель одного конкретного способа записи switch.
PHP предоставляет два эквивалентных способа записи блочных операторов, таких как switch, if, for, foreach и while:
- Синтаксис с фигурными скобками —
switch (...) { ... } - Альтернативный (двоеточие) синтаксис —
switch (...): ... endswitch;
На этой странице объясняется, когда требуется endswitch, зачем существует альтернативный синтаксис и какая распространённая ловушка поджидает разработчиков.
Синтаксис: скобки или endswitch
Два фрагмента кода ниже делают ровно одно и то же. Единственное отличие — способ открытия и закрытия блока.
<?php
// Curly-brace syntax — no endswitch
switch ($n) {
case 1:
echo "one";
break;
default:
echo "other";
}<?php
// Alternative syntax — colon opens, endswitch closes
switch ($n):
case 1:
echo "one";
break;
default:
echo "other";
endswitch;endswitch обязателен при использовании формы с двоеточием и недопустим при форме со скобками — для каждого switch выбирается один стиль и используется последовательно. Смешивание стилей (открывающее : с закрывающим }, или наоборот) является ошибкой разбора.
Пример
Ниже приведён полный, работающий пример с использованием альтернативного синтаксиса:
<?php
$dayOfWeek = 2;
switch ($dayOfWeek):
case 1:
echo "Today is Monday";
break;
case 2:
echo "Today is Tuesday";
break;
case 3:
echo "Today is Wednesday";
break;
case 4:
echo "Today is Thursday";
break;
case 5:
echo "Today is Friday";
break;
default:
echo "It is the weekend!";
endswitch;Поскольку $dayOfWeek равно 2, выполняется ветка case 2: и выводится Today is Tuesday. Оператор break в конце каждой ветки завершает switch, чтобы последующие варианты не выполнялись, а default: обрабатывает любое значение, не совпавшее ни с одним case. Строка endswitch; закрывает структуру; после неё выполнение продолжается с того, что идёт дальше.
Зачем использовать альтернативный синтаксис?
Форма с двоеточием существует главным образом для шаблонов, где PHP перемежается с HTML. Когда тело управляющей структуры занимает много строк разметки, случайная } легко теряется и с трудом находится на глаз. Именованное ключевое слово endswitch делает место закрытия очевидным — сразу видно, что оно образует пару с switch, так же как </div> образует пару с <div>.
Этот шаблон распространён в простых PHP-шаблонах (и во фреймворках, которые компилируются в них):
<?php switch ($status): ?>
<?php case 'active': ?>
<p>Your account is active.</p>
<?php break; ?>
<?php case 'pending': ?>
<p>Your account is awaiting approval.</p>
<?php break; ?>
<?php default: ?>
<p>Account status unknown.</p>
<?php endswitch; ?>Здесь варианты выводят HTML напрямую, а не через echo. Альтернативный синтаксис делает каждый тег <?php ?> кратким, а закрывающий endswitch самодокументируемым. При использовании скобок закрытие выглядело бы как одинокое <?php } ?> — куда менее читаемо внутри большого объёма разметки.
Распространённая ловушка: нет вывода перед первым case
В альтернативном синтаксисе switch нельзя выводить HTML или пробелы между строкой switch(...): и первым case. В шаблоне текст, размещённый там, безусловно отправляется браузеру, а PHP выдаёт предупреждение — поэтому держите открывающий тег вплотную к первому <?php case ...: ?>.
Связанные материалы
switchи PHPswitch— оператор, который закрываетendswitchbreak— выходит изcase, чтобы выполнение не «проваливалось» дальшеendif,endfor,endforeach— аналогичные закрывающие ключевые слова альтернативного синтаксиса для других управляющих структур