Условные операторы в PHP: if, else, switch, match
Программа становится по-настоящему полезной, когда умеет принимать решения: показать скидку постоянному клиенту, спрятать кнопку от незарегистрированного пользователя. За решения в PHP отвечают условные операторы — if, else, switch и современный match.
Оператор if
Самая простая форма: если условие истинно — выполнить блок кода в фигурных скобках:
<?php
$age = 20;
if ($age >= 18) {
echo "Доступ разрешён";
}
// Вывод: Доступ разрешён
Условие — это любое выражение, которое даёт true или false. Для сравнения используются операторы:
| Оператор | Значение | Пример (true) |
|---|---|---|
== | равно (по значению) | 5 == "5" |
=== | тождественно (значение и тип) | 5 === 5 |
!= / !== | не равно / не тождественно | 5 !== "5" |
>, <, >=, <= | больше, меньше | 7 > 3 |
Старайтесь всегда использовать строгое сравнение
===: оно не допускает неожиданных преобразований типов. Например,0 == "привет"в старых версиях PHP было истиной!
else и elseif
Блок else выполняется, когда условие ложно. А elseif позволяет проверить несколько условий по цепочке:
<?php
$score = 75;
if ($score >= 90) {
echo "Отлично!";
} elseif ($score >= 60) {
echo "Хорошо, но можно лучше";
} else {
echo "Стоит повторить материал";
}
// Вывод: Хорошо, но можно лучше
PHP проверяет условия сверху вниз и выполняет первый подошедший блок, остальные пропускает.
Логические операторы
Условия можно комбинировать: && — «и», || — «или», ! — «не»:
<?php
$age = 25;
$hasTicket = true;
if ($age >= 18 && $hasTicket) {
echo "Проходите в зал";
}
// Вывод: Проходите в зал
if (!$hasTicket || $age < 18) {
echo "Вход закрыт";
}
// Ничего не выведет — условие ложно
Тернарный оператор
Короткая запись «если — то — иначе» в одну строку:
<?php
$isLoggedIn = true;
$label = $isLoggedIn ? "Выйти" : "Войти";
echo $label; // Вывод: Выйти
Оператор switch
Когда одну переменную нужно сравнить с несколькими значениями, цепочка elseif становится громоздкой. Тут помогает switch:
<?php
$role = "editor";
switch ($role) {
case "admin":
echo "Полный доступ";
break;
case "editor":
echo "Можно редактировать статьи";
break;
case "guest":
echo "Только чтение";
break;
default:
echo "Неизвестная роль";
}
// Вывод: Можно редактировать статьи
Важные детали:
breakостанавливает проверку — без него PHP «провалится» в следующийcaseи выполнит его тоже;defaultсрабатывает, если ни одинcaseне подошёл;switchсравнивает нестрого (как==) — об этом стоит помнить.
Выражение match (PHP 8)
В PHP 8 появился match — современная альтернатива switch. Это выражение: оно возвращает значение, которое можно сразу записать в переменную. Сравнение всегда строгое (===), а break не нужен:
<?php
$status = 404;
$message = match ($status) {
200, 201 => "Успешно",
301, 302 => "Перенаправление",
404 => "Страница не найдена",
500 => "Ошибка сервера",
default => "Неизвестный статус",
};
echo $message; // Вывод: Страница не найдена
Несколько значений в одной ветке перечисляются через запятую. Если ни одна ветка не подошла и нет default, PHP выбросит ошибку UnhandledMatchError — это защищает от «тихих» пропусков.
switch или match?
switch | match | |
|---|---|---|
| Сравнение | нестрогое == | строгое === |
| Возвращает значение | нет | да |
Нужен break | да | нет |
| Если нет совпадения | молча идёт дальше | ошибка (без default) |
В новом коде на PHP 8+ предпочтительнее
match: короче, безопаснее и сразу возвращает результат.
Практический пример
<?php
$hour = 14;
$greeting = match (true) {
$hour < 6 => "Доброй ночи",
$hour < 12 => "Доброе утро",
$hour < 18 => "Добрый день",
default => "Добрый вечер",
};
echo $greeting; // Вывод: Добрый день
Здесь использован приём match (true) — он позволяет писать в ветках полноценные условия, заменяя длинную цепочку elseif.
Что мы узнали
if / elseif / elseвыполняют разный код в зависимости от условий.- Строгое сравнение
===надёжнее, чем==, — оно учитывает тип. - Условия комбинируются операторами
&&,||и!. - Тернарный оператор
?:— короткая форма if-else для простых случаев. switchсравнивает одну переменную с набором значений, но требуетbreak.matchиз PHP 8 — строгий, компактный и возвращает значение; приёмmatch (true)заменяет цепочкиelseif.
Закрепите практикой
Задачи с автоматической проверкой — решайте прямо здесь, не уходя из учебника.