switch
Когда одну переменную нужно сравнить с несколькими значениями, цепочка if и elseif получается длинной. Конструкция switch записывает такой выбор компактнее.
Простой switch
В скобках указывают значение, а каждую ветку начинают словом case:
<?php
$day = 3;
switch ($day) {
case 1:
echo 'Понедельник';
break;
case 3:
echo 'Среда';
break;
}PHP находит ветку с подходящим значением и выполняет её код.
Ветка default
Если ни один вариант не подошёл, выполняется ветка default:
<?php
$color = 'фиолетовый';
switch ($color) {
case 'красный':
echo 'Стоп';
break;
case 'зелёный':
echo 'Идите';
break;
default:
echo 'Неизвестный сигнал';
}Зачем нужен break
break завершает switch. Без него выполнение «проваливается» в следующую ветку:
<?php
$level = 1;
switch ($level) {
case 1:
echo 'один ';
case 2:
echo 'два ';
break;
case 3:
echo 'три';
}Выведется «один два»: после первой ветки нет break, и выполнилась вторая.
Несколько значений — одна ветка
Проваливание используют намеренно, чтобы одним кодом обработать несколько значений:
<?php
$day = 6;
switch ($day) {
case 6:
case 7:
echo 'Выходной';
break;
default:
echo 'Рабочий день';
}switch или match
Выражение match из урока об условиях решает ту же задачу и возвращает значение:
<?php
$day = 6;
$type = match ($day) {
6, 7 => 'Выходной',
default => 'Рабочий день',
};
echo $type; // Выходнойswitch | match | |
|---|---|---|
| Сравнение | Нестрогое, как == | Строгое, как === |
break | Нужен в каждой ветке | Не нужен |
| Результат | Нет, это инструкция | Возвращает значение |
| Несколько строк в ветке | Да | Нет, одно выражение |
Когда нужно выбрать значение — берите match. Когда в ветке несколько действий — switch.
Частая ошибка
switch сравнивает нестрого. Строка '1' и число 1 для него равны, и сработает первая подходящая ветка:
<?php
$value = '1';
switch ($value) {
case 1:
echo 'число один';
break;
case '1':
echo 'строка один';
break;
}Выведется «число один». Если тип важен, используйте match.