PHP :: Условный оператор switch
Оператор switch по своему действию похож на серию последовательных операторов if с одинаковым условием. Он применяется в тех случаях, когда требуется сравнить одну и ту же переменную или выражение с множеством различных значений и в зависимости от результата сравнения выполнить различные участки кода. Использование оператора switch показано в примере №1.
<?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 и передачи управления оператору, следующему за ним.
<?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).
<?php //Присвоили переменной строку $a="Спорт"; switch($a){ case "Курение": //Не выведется, т.к. $a<>"Спорт" echo 'Вредит здоровью'; case "Спорт": case "Здоровый сон": case "Правильное питание": //Данная строка будет выведена при равенстве //условия оператора switch одному из 3 вариантов echo 'Полезно для здоровья.'; } ?>
Пример №3. Применение пустых операторов case
Быстрый переход к другим страницам
- Условный оператор if в PHP
- Условный оператор switch в PHP
- Циклы while и do/while в PHP
- Вернуться к оглавлению учебника