Оператор switch
аналогичен серии операторов IF для одного и того же выражения. Во многих случаях вам может потребоваться сравнить одну и ту же переменную (или выражение) со многими различными значениями и выполнить другой фрагмент кода в зависимости от того, какому значению оно соответствует. switch
Заявление именно для этого .
Примечание . Обратите внимание, что в отличие от некоторых других языков оператор continue
switch
применяется и действует аналогично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;
}
?>
0 комментариев