Искать
Вы превысили запрос на
0 знаков

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

Не пройден
10 заданий

Кратко

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

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

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

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

Пример (php)
<?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)
<?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)
<?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)
<?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)
<?php
	$value = 10; 
	
	$result = match ($value) { 
		1 => "One", 
		10 => "Ten", 
		100 => "Hundred", 
		default => "Other" 
	};
	
	echo $result; // Распечатает Ten
?> 

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

Пример (php)
<?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)
<?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

@codebra_official
Подписывайся на наш Telegram-канал!
Новости, полезный материал,
программирование и ИБ
Пользовательские функции в PHPКурс по PHP
Обработка исключений (try/except) в PythonЗнакомство с Python
Переменные, комментарии и типы данных в PHPКурс по PHP
Погружение в PythonЗнакомство с Python
Итоги раздела «Самые основы Python»Знакомство с Python
Условная конструкция if-elseif-else в PHPКурс по PHP
Поиск хостов с помощью NmapРазведка и сканирование
Первое знакомство с PythonЗнакомство с Python
Введение в раздел «Структуры данных в Python»Знакомство с Python
Впервые на сайте Codebra?

Извините за это всплывающее окно, меня они тоже раздражают.

Образовательный ресурс codebra.ru полностью посвящен программированию и компьютерной безопасности. Все курсы и уроки находятся на главной странице. Ради интереса можете посмотреть на содержимое курсов по Пентесту Active Directory, Python, HTML и CSS, JavaScript, C++ и другие, размещенные на главной странице.

Если что-то не нашли, то воспользуйтесь поиском по сайту, который находится на главной странице в самом верху.

Удачи в обучении!

Закрыть окно