Внимание! На этой странице вы найдете материал урока из архивного курса по 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 до 4 и выводит его название на английском языке (например, "One", "Two", "Three", "Four"). Если число выходит за пределы этого диапазона, выведите "Out of range".
- Выбор дня недели: Создайте программу, которая принимает номер дня недели (от 1 до 7) и выводит название дня недели (например, 1 - "Monday", 2 - "Tuesday", и так далее). Если номер дня неверный, выведите "Invalid day".
- Конвертация температуры: Напишите код, который принимает температуру в градусах Цельсия и выводит её в градусах Фаренгейта или Кельвина в зависимости от выбранной единицы измерения (например, "C" или "F"). Используйте
switchдля выбора единицы измерения и выполните соответствующую конвертацию. - Анализ оценок: Создайте программу, которая принимает оценку (A, B, C, D, F) и выводит соответствующую оценку в словах ("Excellent", "Good", "Average", "Poor", "Fail"). Если оценка не распознана, выведите "Invalid grade".
- Планирование путешествия: Напишите код, который принимает тип транспорта (например, "car", "bus", "train", "plane") и выводит соответствующий совет по путешествию (например, "Consider traffic", "Check schedule", и так далее).
Задания на оператор match
- Рейтинг фильмов: Создайте программу, которая принимает рейтинг фильма (например, "G", "PG", "PG-13", "R") и возвращает соответствующее описание для каждой категории ("General", "Parental Guidance", "Parents Strongly Cautioned", "Restricted").
- Выбор языка программирования: Напишите код, который принимает название языка программирования (например, "PHP", "Python", "Java", "JavaScript") и выводит сообщение о том, для чего этот язык чаще всего используется (например, "Web development", "Data science", и так далее).
- Определение сезона: Напишите код, который принимает месяц года (например, "January", "June", "October") и выводит название сезона (например, "Winter", "Summer", "Autumn"). Используйте
matchдля определения сезона на основе месяца. - Выбор упаковки: Создайте программу, которая принимает тип упаковки товара (например, "small", "medium", "large") и возвращает размер упаковки в сантиметрах (например, "Small: 10x10x10 cm", "Medium: 20x20x20 cm", и так далее).
- Определение дня года: Напишите код, который принимает номер дня года (от 1 до 365) и выводит название месяца и число (например, "March 15"). Используйте
matchдля определения месяца и дня на основе номера дня года.
Переходите к следующему уроку курса, а так же не забудьте посмотреть новый материал на Codebra по тегу PHP.
