html.okpython.net
HTML и CSS для начинающих

PHP :: Условный оператор switch

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

PHP Результат 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 и передачи управления оператору, следующему за ним.

PHP Результат 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).

PHP Результат htmlCodes
<?php

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

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

?>

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

Быстрый переход к другим страницам