W3docs

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 и PHP switch — оператор, который закрывает endswitch
  • break — выходит из case, чтобы выполнение не «проваливалось» дальше
  • endif, endfor, endforeach — аналогичные закрывающие ключевые слова альтернативного синтаксиса для других управляющих структур

Практика

Практика
Что обозначает оператор 'endswitch' в PHP?
Что обозначает оператор 'endswitch' в PHP?
Was this page helpful?