Codebra
29 января 2026 в 19:29

Урок 8. Операторы switch и match в PHP

Альтернативный синтаксис условных конструкций в PHP. Изучим новый оператор match и познакомимся с оператором switch.
📝

Внимание! На этой странице вы найдете материал урока из архивного курса по PHP. Курс был написан в 2024 году одним из первых учеников Codebra и, к моменту написания курса, опытным бэкэнд-разработчиком. К сожалению, курс не был дописан, а его автор молча пропал.

Полный список уроков доступен по тегу Архивный курс по PHP и на странице первого урока.

📝 Кратко

Основы условных конструкций

  • Условные конструкции if/elseif/else используются для выполнения кода на основе условий.
  • Оператор switch похож на ряд условных конструкций if и удобен для сравнения переменной со множеством значений.

Строгая и нестрогая проверка типов данных

  • PHP слабо типизирован, что приводит к нестрогой проверке типов данных.
  • Интерпретатор автоматически пытается преобразовать строки в числа, что может привести к ошибкам.

Использование оператора break

  • Оператор break предотвращает "проваливание" (fall-through) и делает код более предсказуемым.
  • Без break выполнение может продолжаться в следующем блоке case, что может привести к неожиданным результатам.

Ключевое слово default

  • Ключевое слово default используется для выполнения блока кода, если ни одно из условий не подошло.
  • В случае использования блока default оператор break не требуется.

Оператор match

  • В PHP 8.0 добавлен оператор match, который обеспечивает строгое сравнение значений.
  • Оператор match похож на оператор switch, но имеет более сложное синтаксическое использование.

Заключительные замечания

  • Автор подчеркивает сложность и непонятность программирования, но стремится дать базовые знания.
  • Программирование требует практики и понимания более сложных тем придет со временем.
  • В конце статьи приведены задания на использование операторов switch и match.

В предыдущем уроке изучили условную конструкцию if/elseif/else. Есть также альтернативные условные конструкции, которые могут найти применение в ваших программах.

Оператор switch

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

💡 Что такое строгая и не строгая проверка?

Мы с вами уже говорили о типах данных. У каждого значения есть свой тип: string, integer, boolean и т.д. А так как PHP слабо типизирован, если мы сравним 3 == '3', то получим true. Почему? Интерпретатор видит, что у нас левый операнд — число, а правый — строка. Он попытается преобразовать эту строку в число автоматически. Если ему это не удастся, он выведет ошибку. Это одновременно и плюс высокоуровневых языков, и их минус.

Исходя из вышесказанного, проверка оператором switch будет не строгая.

Пример и синтаксис оператора switch:

<?php
	$text = 'Alen';
	/*
	* Мы не можем писать свои условия, 
	* switch делает не строгое сравнение
	*/
	switch ($text) {
		/*
		* case блок проверяемого значения и рядом само значение.
		*/
		case 'Ben':
			echo "Ben";
			break; // Всегда пишем break
		case 3:
			echo 3;
			break;
	}
?>

Зачем писать break в конце?

Предотвращение "проваливания" (fall-through): без break выполнение будет продолжаться в следующем блоке case, даже если значение не совпадает. Это может привести к разным неожиданным результатам.

<?php
	$fruit = "apple"; 

	/*
	* Будет распечатано It's an apple.It's a banana. 
	* Не тот результат который нам нужен, правда?)
	*
	*/
	
	switch ($fruit) { 
		case "apple": 
			echo "It's an apple."; 
		case "banana": 
			echo "It's a banana."; 
			break; 
		
	}
?>

Ясность кода: Использование break делает код более предсказуемым и понятным, так как явно обозначает, что выполнение должно завершиться после выполнения соответствующего блока case.

Избежание ошибок: Без break вы можете случайно выполнить несколько блоков case, что может быть неочевидным и приводить к логическим ошибкам в программе.

Когда можно не использовать break?

Только тогда, когда вам надо выполнить два блока условия сразу. Но в завершающемся блоке всегда ставьте break.

<?php
	$day = "Monday"; 
	
	switch ($day) { 
		case "Monday": 
		case "Tuesday": 
			echo "Start of the work week."; 
			break; 
		case "Saturday": 
		case "Sunday": 
			echo "It's the weekend!";
			break; 
	}
?>

Оператор break служит в switch ограничителем. Он предотвращает нежелательные переходы между блоками case.

Ключевое слово default

Ключевое слово default - дефолтное значение в операторе switch если ни одно условие не подошло.

<?php
	$day = "Monday"; 
	
	switch ($day) { 
		case "Monday": 
		case "Tuesday": 
			echo "Start of the work week."; 
			break; 
		case "Saturday": 
		case "Sunday": 
			echo "It's the weekend!";
			break; 
		default:
			echo "Default"; 
	}
?>

В этом коде ничего прям сложного нет. Блок default отработает, если нет подходящего блока case. В случает использования блока default, оператор break ставить нет необходимости.

Оператор match

В PHP 8.0 добавили оператор match , который похож на оператор switch, но у него строгое сравнение, то есть 3 = '3' будет уже false так как оператор = три равно проверяет значение и тип, если они не сходятся по этим параметрам будет false.

<?php
	$value = 'PHP'

	$result = match($value) {
		'JS' => 'I LOVE JAVASCRIPT',
		'HTML' => 'I LOVE HTML',
		'CSS' => 'I LOVE CSS',
		'PHP' => 'I LOVE PHP',
		default => 'Default'
	}
	
	echo $result; // Распечает I LOVE PHP
?>
<?php
	$value = 10; 
	
	$result = match ($value) { 
		1 => "One", 
		10 => "Ten", 
		100 => "Hundred", 
		default => "Other" 
	};
	
	echo $result; // Распечатает Ten
?>

Несколько значений:

<?php
	$day = "Monday"; 
	
	$message = match ($day) { 
		"Saturday", "Sunday" => "It's the weekend!", 
		"Monday", "Tuesday", "Wednesday", "Thursday", "Friday" => "It's a weekday.",
		default => "Unknown day." 
	}; 
	
	echo $message; //Распечает  It's a weekday.
?>

Проверка с выражениями:

<?php
	$age = 25; 
	
	$category = match (true) { 
		 $age < 13 => "Child", 
		 $age >= 13 && $age < 20 => "Teenager",
		 $age >= 20 && $age < 65 => "Adult", 
		 default => "Senior", 
	};
	 
	 echo $category; // Распечатает Adult
?>

Этот оператор чуть сложней, но он такой же крутой :)

Заключение

Мы два урока изучали условные конструкции. Уроки были сложные, возможно, непонятные. Я надеюсь, что вы решили все задачи и у вас выстроилась какая-никакая картина в голове. Я не устану повторять, что программирование сложное и непонятное. Я стараюсь дать вам основные знания, не вдаваясь в подробности. Нам важно, чтобы вы научились писать простые программы. Со временем у вас придёт понимание более сложных и глубоких тем.

Решили задачи? Бегом к следующему уроку про массивы в PHP.

Задание

Задания на оператор switch

  1. Классификация по числу: Напишите код, который принимает число от 1 до 4 и выводит его название на английском языке (например, "One", "Two", "Three", "Four"). Если число выходит за пределы этого диапазона, выведите "Out of range".
  2. Выбор дня недели: Создайте программу, которая принимает номер дня недели (от 1 до 7) и выводит название дня недели (например, 1 - "Monday", 2 - "Tuesday", и так далее). Если номер дня неверный, выведите "Invalid day".
  3. Конвертация температуры: Напишите код, который принимает температуру в градусах Цельсия и выводит её в градусах Фаренгейта или Кельвина в зависимости от выбранной единицы измерения (например, "C" или "F"). Используйте switch для выбора единицы измерения и выполните соответствующую конвертацию.
  4. Анализ оценок: Создайте программу, которая принимает оценку (A, B, C, D, F) и выводит соответствующую оценку в словах ("Excellent", "Good", "Average", "Poor", "Fail"). Если оценка не распознана, выведите "Invalid grade".
  5. Планирование путешествия: Напишите код, который принимает тип транспорта (например, "car", "bus", "train", "plane") и выводит соответствующий совет по путешествию (например, "Consider traffic", "Check schedule", и так далее).

Задания на оператор match

  1. Рейтинг фильмов: Создайте программу, которая принимает рейтинг фильма (например, "G", "PG", "PG-13", "R") и возвращает соответствующее описание для каждой категории ("General", "Parental Guidance", "Parents Strongly Cautioned", "Restricted").
  2. Выбор языка программирования: Напишите код, который принимает название языка программирования (например, "PHP", "Python", "Java", "JavaScript") и выводит сообщение о том, для чего этот язык чаще всего используется (например, "Web development", "Data science", и так далее).
  3. Определение сезона: Напишите код, который принимает месяц года (например, "January", "June", "October") и выводит название сезона (например, "Winter", "Summer", "Autumn"). Используйте match для определения сезона на основе месяца.
  4. Выбор упаковки: Создайте программу, которая принимает тип упаковки товара (например, "small", "medium", "large") и возвращает размер упаковки в сантиметрах (например, "Small: 10x10x10 cm", "Medium: 20x20x20 cm", и так далее).
  5. Определение дня года: Напишите код, который принимает номер дня года (от 1 до 365) и выводит название месяца и число (например, "March 15"). Используйте match для определения месяца и дня на основе номера дня года.
📝

Переходите к следующему уроку курса, а так же не забудьте посмотреть новый материал на Codebra по тегу PHP.