belarusweb.net
© Петр Романовский Минск, 2016-2017.



belarusweb.net

Основы создания сайтов...
PHP+MySQL >>>
                          Учебник Задачник Справочник

4.3. Условный оператор switch

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

<?php
$a=5; 				//Присвоили переменной число

switch($a){ 		//В круглых скобках записывается условие оператора switch
	case 5:   		//Оператор case служит меткой для указания места, с которого 
						//интерпретатор будет выполнять код, если его значение 
						//окажется равным значению условия оператора switch
		echo '$a равно 5';.'<br>'  //Выведет эту строку, т.к. $a==5
		break;  		//Оператор break прерывает выполнение всей текущей конструкции
	case 0:
		echo '$a равно 0';		   //Выполняться не будет, т.к. $a<>0
		break;
	case 8:
		echo '$a равно 8'; 		   //Выполняться не будет, т.к. $a<>8
		break;
	default: //Оператор default служит меткой для указания места, с которого 
	 			//интерпретатор будет выполнять код, если не сработает ни один из 
				//операторов case  
		echo 'Совпадений не обнаружено.';	
}				//Точку с запятой после фигурных скобок не ставят

/* Тоже самое можно проделать при помощи серии операторов if и else/if */

if($a==5){ 		
	echo '$a равно 5'.'<br>';		 //Выведет эту строку, т.к. $a==5
}else if($a==0){	
		echo '$a равно 0';  
}else if($a==8){	
		echo '$a равно 8';  
}else{			
		echo 'Совпадений не обнаружено.';	
}				
?>

Пример 4.4. Условный оператор switch

Также, как и в случае с оператором if, в круглых скобках после ключевого слова switch записывается условие оператора, после чего в фигурных скобках располагается и само тело оператора. В теле оператора записывают необходимое количество специальных меток, сформированных из операторов case, соответствующих им выражений, которые могут быть приведены к простому типу, например, integer, float, bool, string, и двоеточий, завершающих конструкции меток. После меток записываются соответствующие данным меткам фрагменты кода, которые будут выполнены в случае равенства значения условия оператора switch значению выражения данной метки.

Поскольку в операторе switch выражение вычисляется всего один раз и этот результат сравнивается со значением каждого оператора case, а условие оператора elseif вычисляется снова в каждом из них, то в случае сложных сравнений или нахождения внутри цикла конструкция switch может работать быстрее, чем соответствующая конструкция if с дополнительными операторами elseif.

Отметим, что после вычисления значения условия оператора switch интерпретатор начинает сравнивать это значение со значениями операторов case. При этом используется нестрогое сравнение при помощи оператора '=='. Когда совпадение будет найдено, интерпретатор начинает выполнять весь последующий код вплоть до конца блока switch, т.е. включая код всех последующих операторов case и необязательного оператора default (см. пример 4.5). Поэтому, во избежание такого поведения интерпретатора, следует в конце соответствующих кусков кода применять оператор break, который служит для прерывания текущего оператора switch и передачи управления оператору, следующему за ним.

<?php
$a="Фрукты"; 			//Присвоили переменной строку

switch($a){ 		
	case "Овощи":   		 
		echo 'Морковь';//Выполняться не будет, т.к. $a<>"Фрукты"
	case "Фрукты": 	//Отсюда и до конца блока switch все инструкции будут выполнены
		echo 'Яблоки'.'<br>';					 //Строка будет выведена 
	case "Ягоды":
		echo 'Черника'.'<br>';					 //Строка будет выведена 
	default: 
		echo 'Фрукты отсутствуют.'.'<br>';	 //Строка будет выведена 
}			
?>

Пример 4.5. Выполнение оператора switch в случае отсутствия операторов break

Что касается применения необязательного оператора default, то он используется в случае, когда необходимо выполнить какой-нибудь альтернативный код при отсутствии каких-либо совпадений результата условия оператора switch со значениями имеющихся операторов case.

Если один и тот же код должен быть исполнен для различных значений условия оператора switch, то соответствующие этим значениям операторы case можно оставить пустыми, за исключением последнего в списке, в котором и следует записать код для исполнения (см. пример 4.6).

<?php
$a="Спорт"; 	//Присвоили переменной строку

switch($a){ 		
	case "Курение":   		 
		echo 'Вредит здоровью';			//Не выведется, т.к. $a<>"Спорт"
	case "Спорт": 	
	case "Здоровый сон":
	case "Правильное питание":	
		echo 'Полезно для здоровья.'; //Данная строка будет выведена при 
		      //равенстве условия оператора switch одному из трех вариантов
}			
?>

Пример 4.6. Применение пустых операторов case

Контрольные вопросы и задания

  1. Опишите условный оператор switch. Какой из операторов работает быстрее: if или switch?
  2. Значения какого типа может принимать оператор case в качестве своего аргумента? Для чего в конструкции switch используются операторы break и default?

Словарь новых английских слов

if [if] – если.
else [els] – иначе, еще.
switch [swɪtʃ] – переключение.       
case [keɪs] – блок, контейнер.
break [breɪk] – прерывать.
while [wʌɪl] – до тех пор пока.
do [duː] – делать.
for [fɔː] – для.
each [iːtʃ] – каждый.
continue [kənˈtɪnjuː] – продолжать.
default [dɪˈfɔːlt] – по умолчанию.
key [kiː] – ключ.
as [æz] – как.
value [ˈvaljuː] – значение.
Комментарии (0)
Петр Романовский
1. Приветствуются комментарии, которые содержат дополнения к материалу текущей страницы, а также ваши ответы на вопросы других пользователей.
2. Если вам что-то непонятно - спрашивайте, не забывая написать, что именно и с какого места.
Показаны все комментарии
Чтобы оставить свой комментарий, авторизуйтесь, пожалуйста!    
     
belarusweb.net © Петр Романовский, Минск, 2016-2017.
Связаться с автором
Наверх