Оператор switch в PHP

Александр Кичатов

Оператор switch является аналогом конструкции IF ELSEIF ELSE и позволяет выполнять различные действия в зависимости от значения.

В следующем коде можно увидеть, как одну и ту же задачу можно решить с помощью if и switch:

<?php
    $status = 2; // Номер статуса заказа

    if($status == 1)
        echo 'Статус: Обрабатывается';
    elseif($status == 2)
        echo 'Статус: Передан в доставку';
    elseif($status == 3)
        echo 'Статус: Выполнен';
    else
        echo 'Статус: Неизвестен';

    // Аналогичный код для switch
    switch($status)
    {
        case 1:
            echo 'Статус: Обрабатывается';
            break;
        case 2:
            echo 'Статус: Передан в доставку';
            break;
        case 3:
            echo 'Статус: Выполнен';
            break;
        default:
            echo 'Статус: Неизвестен';
    }
?>

Конструкция switch использует нестрогое сравнение ==.

В круглые скобки мы помещаем значение, которое будет сравниваться с остальными. Затем идёт case, сравниваемое значение и двоеточие. Затем идут команды, которые нужно выполнить. Блок default выполнится, если не выполнен ни один блок case.

Команда break прерывает текущее выполнение switch. Дело в том, что switch выполняет все команды подряд, даже если они находятся в разных блоках case:

<?php
    $status = 1;

    switch($status)
    {
        case 1:
            echo 'Статус: Обрабатывается<br>';
        case 2:
            echo 'Статус: Передан в доставку<br>';
            break;
        case 3:
            echo 'Статус: Выполнен<br>';
            break;
    }
?>

Результат в браузере:

Статус: Обрабатывается
Статус: Передан в доставку

В примере выше выполнились 2 блока case. 1-ый - потому что подходит по условию, второй - потому что в 1-ом блоке отсутствует break.

Несколько значений в CASE

Также в switch можно использовать один блок кода для нескольких значений:

<?php
    $status = 2;

    switch($status)
    {
        case 1:
        case 2:
            echo 'Ожидайте звонка менеджера';
            break;
        case 3:
        case 4:
            echo 'Заказ скоро будет доставлен';
    }
?>

Обычно выбор между if и switch делается исходя только из предпочтений разработчика.

Лично я никогда не использую swtich просто потому что конструкции if-elseif-else мне нравятся больше.

Комментарии