3.2 - Конструкция оператора switch/case в PHP

Оператор switch тоже является оператором условия. С тем отличием, что он вычисляет значение переменной один раз и сравнивает с другими значениями. Это дает два преимущества, по сравнению с конструкцией else if:

  • - чуть больше скорость при выполнении
  • - удобство при написании и последующем чтении кода

К примеру - допустим у вас сайт на нескольких языках и нужно выбрать какой именно используется. В конструкции if / else if нужно было бы для каждого языка писать проверку: ($lang == 'ru'), ($lang == 'en'), ($lang == 'de') и так далее... При использовании оператора switch это делается гораздо удобней:

Пример

<?php
$lang = 'ru';

switch ($lang){

	case "ru":
		echo "выводим контент на русском";
		break;
    
	case "en":
		echo "выводим контент на английском";
		break;	
    
	case "de":
		echo "выводим контент на немецком";
		break;
}

// этот пример выведет: выводим контент на русском

?>

Видите на сколько это удобней для текущей задачи?

Синтаксис оператора

Ключевое слово switch за которым в скобках указывается переменная ($lang), после в фигурных скобках тело оператора. А тут самое интересное - ключевое слово case. Именно это ключевое слово служит для разделения и сравнения значения с переменной: (из примера case 'ru') . Т.е. при совпадении значения переменной со значением оператора case - будет выполняться весь последующий код.

Важно: оператор switch использует неточное сравнение ($lang == 'ru')

Еще одним важным моментом является оператор break. Этот оператор в нашем случае нужен для конечной точки выполнения кода. Это связано с тем, что оператор case задает точку с которой нужно начать выполнение кода, но не задает когда нужно остановиться. Иногда это бывает полезным)))

<?php
$a = 0;

switch ($a){

	case 0: 
    echo 'a = 0';
    
	case 1:
    echo 'a = 1';
    
	case 2:	
    echo 'a = 2';
    
}

// выведет: a = 0 a = 1 a = 2

?>

Как видно из примера - если значения совпали - то будет выполнять код до конца тела оператора. В нашем примере сработали все блоки case. Если установить значение переменно равную 1, то выполняться последние два блока.

Но как уже было сказано - в этом есть своя выгода:

<?php
$a = 2;

switch ($a){

	case 0: 
	case 1:
	case 2:	
    echo 'a находится в диапазоне от 0 до 2';
    break;
  
  case 3: 
	case 4:
	case 5:	
    echo 'a находится в диапазоне от 3 до 5';
    break;
  
  case 6:	
    echo 'a равно 6';
    break;
}

// выведет: a = 0 a = 1 a = 2

?>
Действия по умолчанию А что делать если нет нужного значения? Все значения ведь не укажешь В этом случае поможет оператор default, который будет срабатывать при условии что все предыдущие операторы case не были задействованы (значения не совпали). Вернемся к нашему примеру
<?php
$lang = 'ar';

switch ($lang){

	case "ru":
		echo "выводим контент на русском";
		break;
    
	case "en":
		echo "выводим контент на английском";
		break;	
    
	case "de":
		echo "контент на немецком";
		break;
    
  default: 
    echo "нет у нас такого языка - выведем ошибку 404";
}

// этот пример выведет: нет у нас такого языка - выведем ошибку 404

?>

Вот теперь все встало на свои места. Есть язык - выводим, нет языка - выводим ошибку 404.

Список уроков