0 знаков
8. Операторы switch и match в 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
Подписывайся на наш Telegram-канал!
Новости, полезный материал,
программирование и ИБ
Подписывайся на наш Telegram-канал!
Новости, полезный материал,
программирование и ИБ