PHP :: Условный оператор switch
Оператор switch по своему действию похож на серию последовательных операторов if с одинаковым условием. Он применяется в тех случаях, когда требуется сравнить одну и ту же переменную или выражение с множеством различных значений и в зависимости от результата сравнения выполнить различные участки кода. Использование оператора switch показано в примере №1.
htmlCodes
<?php
//Присвоили переменной число
$a=5;
//В круглых скобках записывается условие оператора switch
//Оператор case служит меткой для указания места, с которого
//интерпретатор будет выполнять код, если его значение окажется
//равным значению условия оператора switch
//Оператор break прерывает выполнение всей текущей конструкции
//Оператор default служит меткой для указания места, с которого интерпретатор
//будет выполнять код, если не сработает ни один изоператоров case
//Точку с запятой после фигурных скобок не ставят
switch($a){
case 5:
//Выведет эту строку, т.к. $a==5
echo '$a равно 5';.'<br>'
break;
case 0:
//Выполняться не будет, т.к. $a<>0
echo '$a равно 0';
break;
case 8:
//Выполняться не будет, т.к. $a<>8
echo '$a равно 8';
break;
default:
echo 'Совпадений не обнаружено.';
}
/* Тоже самое можно проделать при помощи серии операторов if и else/if */
if($a==5){
//Выведет эту строку, т.к. $a==5
echo '$a равно 5'.'<br>';
}else if($a==0){
echo '$a равно 0';
}else if($a==8){
echo '$a равно 8';
}else{
echo 'Совпадений не обнаружено.';
}
?>
Пример №1. Условный оператор switch
Также, как и в случае с оператором if, в круглых скобках после ключевого слова switch записывается условие оператора, после чего в фигурных скобках располагается и само тело оператора. В теле оператора записывают необходимое количество специальных меток, сформированных из case, соответствующих им выражений, которые могут быть приведены к простому типу, например, integer, float, bool, string, и двоеточий, завершающих конструкции меток. После меток записываются соответствующие данным меткам фрагменты кода, которые будут выполнены в случае равенства значения условия оператора switch значению выражения данной метки.
Поскольку в операторе switch выражение вычисляется всего один раз и этот результат сравнивается со значением каждого оператора case, а условие оператора elseif вычисляется снова в каждом из них, то в случае сложных сравнений или нахождения внутри цикла конструкция switch может работать быстрее, чем соответствующая конструкция if с дополнительными операторами elseif.
Отметим, что после вычисления значения условия оператора switch интерпретатор начинает сравнивать это значение со значениями операторов case. При этом используется нестрогое сравнение при помощи оператора ==. Когда совпадение будет найдено, интерпретатор начинает выполнять весь последующий код вплоть до конца блока switch, т.е. включая код всех последующих операторов case и необязательного оператора default (см. пример №2). Поэтому, во избежание такого поведения интерпретатора, следует в конце соответствующих кусков кода применять оператор break, который служит для прерывания текущего оператора switch и передачи управления оператору, следующему за ним.
htmlCodes
<?php
$a="Фрукты"; //Присвоили переменной строку
switch($a){
case "Овощи":
//Выполняться не будет, т.к. $a<>"Фрукты"
echo 'Морковь';
//Отсюда и до конца switch все инструкции будут выполнены
case "Фрукты":
//Строка будет выведена
echo 'Яблоки'.'<br>';
case "Ягоды":
//Строка будет выведена
echo 'Черника'.'<br>';
default:
//Строка будет выведена
echo 'Фрукты отсутствуют.'.'<br>';
}
?>
Пример №2. Выполнение оператора switch в случае отсутствия операторов break
Что касается применения необязательного оператора default, то он используется в случае, когда необходимо выполнить какой-нибудь альтернативный код при отсутствии каких-либо совпадений результата условия оператора switch со значениями имеющихся операторов case.
Если один и тот же код должен быть исполнен для различных значений условия оператора switch, то соответствующие этим значениям операторы case можно оставить пустыми, за исключением последнего в списке, в котором и следует записать код для исполнения (см. пример №3).
htmlCodes
<?php
//Присвоили переменной строку
$a="Спорт";
switch($a){
case "Курение":
//Не выведется, т.к. $a<>"Спорт"
echo 'Вредит здоровью';
case "Спорт":
case "Здоровый сон":
case "Правильное питание":
//Данная строка будет выведена при равенстве
//условия оператора switch одному из 3 вариантов
echo 'Полезно для здоровья.';
}
?>
Пример №3. Применение пустых операторов case
Быстрый переход к другим страницам
- Условный оператор if в PHP
- Условный оператор switch в PHP
- Циклы while и do/while в PHP
- Вернуться к оглавлению учебника