Условные операторы в 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?

switchmatch
Сравнениенестрогое ==строгое ===
Возвращает значениенетда
Нужен 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.
Проверьте себя
1. Чем оператор `===` отличается от `==` в PHP?
A=== работает быстрее
B=== проверяет и значение, и тип; == только значение (с приведением типов)
C=== используется только в циклах
D== сравнивает объекты, === — примитивы
2. Что выведет код: `$score = 75; if ($score >= 90) { echo 'Отлично'; } elseif ($score >= 60) { echo 'Хорошо'; } else { echo 'Плохо'; }`?
AОтлично
BХорошо
CПлохо
DНичего
3. Как записать тернарный оператор для: «если $isLoggedIn — вернуть "Выйти", иначе "Войти"»?
A$label = $isLoggedIn ?? "Войти" : "Выйти"
B$label = $isLoggedIn ? "Выйти" : "Войти"
C$label = if ($isLoggedIn) "Выйти" else "Войти"
D$label = $isLoggedIn || "Выйти" && "Войти"
4. Почему в конструкции `switch` важен оператор `break`?
AБез break switch вернёт ошибку
Bbreak завершает текущую ветвь; без него выполнение «провалится» в следующий case
Cbreak нужен только для default
DБез break switch проверяет условие дважды

Закрепите практикой

Задачи с автоматической проверкой — решайте прямо здесь, не уходя из учебника.

Поддержать проект