Конструкция switch - PHP
В этом уроке вы узнаете о конструкции switch
в PHP, который выполняет блок кода, сопоставляя выражение с несколькими значениями.
Введение
Когда значение одной переменной определяется различным количеством вариантов выбора, вы можете использовать оператор if...elseif
.
Предположим, вы создаете веб-сайт, у которого пользователи имеют различные роли, такие как администратор, редактор, автор и подписчик.
В следующем примере используется оператор if elseif
для отображения различных сообщений в зависимости от роли пользователя:
<?php
$role = 'subscriber';
$message = '';
if ('admin' === $role) {
$message = 'Добро пожаловать, admin!';
} elseif ('editor' === $role) {
$message = 'Добро пожаловать! У вас есть несколько статей, ожидающих редактирования.';
} elseif ('author' === $role) {
$message = 'Добро пожаловать! Хотите опубликовать черновик статьи?';
} elseif ('subscriber' === $role) {
$message = 'Добро пожаловать! Ознакомьтесь с некоторыми новыми статьями.';
} else {
$message = 'Простите! Вы не авторизованы для просмотра этой страницы.';
}
echo $message;
Вывод:
Добро пожаловать! Ознакомьтесь с некоторыми новыми статьями.
Когда значение одной переменной определяется различным количеством вариантов выбора, целесообразней использовать конструкцию switch
, например, так:
<?php
$role = 'admin';
$message = '';
switch ($role) {
case 'admin':
$message = 'Добро пожаловать, admin!';
break;
case 'editor':
$message = 'Добро пожаловать! У вас есть несколько статей, ожидающих редактирования.';
break;
case 'author':
$message = 'Добро пожаловать! Хотите опубликовать черновик статьи?';
break;
case 'subscriber':
$message = 'Добро пожаловать! Ознакомьтесь с некоторыми новыми статьями.';
break;
default:
$message = 'Простите! Вы не авторизованы для просмотра этой страницы.';
}
echo $message;
Следующий код иллюстрирует синтаксис конструкции switch
:
<?php
switch (выражение) {
case value1:
// блок кода 1
break;
case value2:
// блок кода 2
break;
case value3:
// блок кода 3
break;
default:
// блок кода по умолчанию
}
Оператор switch
сравнивает выражение
со значением в каждом случае.
Если выражение равно значению в каком-то случае, например, value1
, PHP выполняет блок кода в соответствующем случае до тех пор, пока не встретит первый оператор break
.
Если нет совпадения, и доступен блок default
, PHP выполняет все инструкции, следующие за ключевым словом default
.
В случае отсутствия блока default
и отсутствия совпадения управление передается оператору, следующему за конструкцией switch
.
Следующая блок-схема иллюстрирует, как работает конструкция switch
:
Комбинирование случаев
Поскольку PHP выполняет конструкцию switch
от совпадающей метки case
до тех пор, пока не встретит оператор break
, вы можете объединить несколько случаев (case
-ов) в один.
В следующем примере используется конструкция switch
, которая объединяет случаи 'editor'
и 'author'
:
<?php
$role = 'author';
$message = '';
switch ($role) {
case 'admin':
$message = 'Добро пожаловать, admin!';
break;
case 'editor':
case 'author':
$message = 'Добро пожаловать! Хотите опубликовать черновик статьи?';
break;
case 'subscriber':
$message = 'Добро пожаловать! Ознакомьтесь с некоторыми новыми статьями.';
break;
default:
$message = 'Простите! Вы не авторизованы для просмотра этой страницы.';
}
echo $message;
Вывод:
Добро пожаловать! Хотите опубликовать черновик статьи?
В этом примере, если роль — editor
или author
, будет показано одно и то же сообщение.
Альтернативный синтаксис конструкции switch в PHP
PHP также поддерживает альтернативный синтаксис конструкции switch
:
<?php
switch (выражение):
case value1:
// блок кода 1
break;
case value2:
// блок кода 2
break;
default:
// блок кода по умолчанию
break;
endswitch;
Альтернативный синтаксис подходит для смешивания с HTML-кодом.
Подытожим
- Используйте конструкцию
switch
в PHP вместо серии конструкцийif
для одного и того же выражения.
if
в PHP и о том, как использовать её для выполнения блока кода при условии. define()
и ключевое слово const
для определения констант.