Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

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; // Выходной
switchmatch
СравнениеНестрогое, как ==Строгое, как ===
breakНужен в каждой веткеНе нужен
РезультатНет, это инструкцияВозвращает значение
Несколько строк в веткеДаНет, одно выражение

Когда нужно выбрать значение — берите match. Когда в ветке несколько действий — switch.

Частая ошибка

switch сравнивает нестрого. Строка '1' и число 1 для него равны, и сработает первая подходящая ветка:

<?php
 
$value = '1';
 
switch ($value) {
    case 1:
        echo 'число один';
        break;
    case '1':
        echo 'строка один';
        break;
}

Выведется «число один». Если тип важен, используйте match.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.