Оператор switchаналогичен серии операторов IF для одного и того же выражения. Во многих случаях вам может потребоваться сравнить одну и ту же переменную (или выражение) со многими различными значениями и выполнить другой фрагмент кода в зависимости от того, какому значению оно соответствует. switchЗаявление именно для этого .

Примечание . Обратите внимание, что в отличие от некоторых других языков оператор continueswitch применяется и действует аналогично break. Если у вас есть switchвнутренний цикл и вы хотите перейти к следующей итерации внешнего цикла, используйте continue 2.

Примечание :

Обратите внимание, что switch/case делает свободное сравнение .

Следующие два примера представляют собой два разных способа написать одно и то же: один с использованием последовательности операторов ifи elseif, а другой с использованием switchоператора:

Пример #1 switchструктура

<?php
if ($i == 0) {
    echo "i equals 0";
} elseif ($i == 1) {
    echo "i equals 1";
} elseif ($i == 2) {
    echo "i equals 2";
}

switch ($i) {
    case 0:
        echo "i equals 0";
        break;
    case 1:
        echo "i equals 1";
        break;
    case 2:
        echo "i equals 2";
        break;
}
?>

switchСтруктура примера #2 позволяет использовать строку s

<?php
switch ($i) {
    case "apple":
        echo "i is apple";
        break;
    case "bar":
        echo "i is bar";
        break;
    case "cake":
        echo "i is cake";
        break;
}
?>

Важно понимать, как выполняется switch оператор, чтобы избежать ошибок. Оператор switchвыполняется построчно (на самом деле, оператор за оператором). В начале код не выполняется. Только когда найден caseоператор, выражение которого оценивается как значение, совпадающее со значением switchвыражения, PHP начинает выполнять операторы. PHP продолжает выполнять операторы до конца switchблока или до тех пор, пока он не увидит breakоператор в первый раз. Если вы не напишете breakоператор в конце списка операторов случая, PHP продолжит выполнение операторов следующего случая. Например:

<?php
switch ($i) {
    case 0:
        echo "i equals 0";
    case 1:
        echo "i equals 1";
    case 2:
        echo "i equals 2";
}
?>

Здесь, если $i равно 0, PHP выполнит все операторы эха! Если $i равно 1, PHP выполнит два последних оператора echo. Вы получите ожидаемое поведение (будет отображаться 'i equals 2') только в том случае, если $i равно 2. Таким образом, важно не забывать breakоператоры (даже если вы, возможно, захотите избежать их использования при определенных обстоятельствах) . .

В switchоператоре условие оценивается только один раз, и результат сравнивается с каждым caseоператором. В elseif операторе условие оценивается снова. Если ваше условие более сложное, чем простое сравнение, и/или находится в жестком цикле, a switchможет быть быстрее.

Список операторов для случая также может быть пустым, что просто передает управление в список операторов для следующего случая.

<?php
switch ($i) {
    case 0:
    case 1:
    case 2:
        echo "i is less than 3 but not negative";
        break;
    case 3:
        echo "i is 3";
}
?>

Особый случай – это defaultслучай. Этот случай соответствует всему, что не соответствует другим случаям. Например:

<?php
switch ($i) {
    case 0:
        echo "i equals 0";
        break;
    case 1:
        echo "i equals 1";
        break;
    case 2:
        echo "i equals 2";
        break;
    default:
       echo "i is not equal to 0, 1 or 2";
}
?>

Примечание . Несколько случаев по умолчанию вызовут E_COMPILE_ERRORошибку.

Альтернативный синтаксис управляющих структур поддерживается переключателями. 

<?php
switch ($i):
    case 0:
        echo "i equals 0";
        break;
    case 1:
        echo "i equals 1";
        break;
    case 2:
        echo "i equals 2";
        break;
    default:
        echo "i is not equal to 0, 1 or 2";
endswitch;
?>

Можно использовать точку с запятой вместо двоеточия после таких случаев, как:

<?php
switch($beer)
{
    case 'tuborg';
    case 'carlsberg';
    case 'heineken';
        echo 'Good choice';
        break;
    default;
        echo 'Please make a new selection...';
        break;
}
?>