<MyRusakov.ru />

Разработчик игр на Unreal Engine

Разработчик игр на Unreal Engine

Этот комплект с нуля всего за 7 месяцев сделает Вас Unreal-разработчиком. И при этом учиться достаточно 1 час в день.

Начнёте Вы с основ программирования, постепенно перейдя к C++. Затем очень подробно изучите Unreal Engine, и после научитесь программировать на C++ в Unreal Engine. В конце создадите крупный проект на C++ в Unreal Engine для своего портфолио.

Комплект содержит:

- 416 видеоуроков

- 95 часов видео

- 1024 задания для закрепления материала из уроков

- 3 финальных тестирования

- 4 сертификата

- 12 Бонусных курсов

Подробнее
Подписка

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Какая тема Вас интересует больше?

match в PHP 8: понятная замена switch с практическими примерами

match в PHP 8: понятная замена switch с практическими примерами

match в PHP 8 — это конструкция для выбора значения по условию. Она похожа на switch, но работает строже, короче и часто безопаснее. Если вы пишете код на современном PHP, match стоит освоить как один из базовых инструментов для обработки статусов, ролей, кодов ошибок, тарифов и других ветвлений.

Что такое match в PHP 8

match — это выражение, то есть оно возвращает значение. Поэтому результат можно сразу присвоить переменной, вернуть из функции или передать дальше.

<?php
$status = 'paid';

$message = match ($status) {
    'new' => 'Заказ создан',
    'paid' => 'Заказ оплачен',
    'cancelled' => 'Заказ отменён',
    default => 'Неизвестный статус',
};

echo $message; // Заказ оплачен

Ключевой поисковый запрос этой статьи — match в PHP 8. Именно его чаще всего вводят разработчики, когда хотят понять, чем новая конструкция отличается от switch и как применять её на практике.

Главные отличия match от switch

  • match возвращает значение, а switch просто выполняет блок кода.
  • match использует строгое сравнение, как ===.
  • В match нет проваливания в следующий case, поэтому не нужен break.
  • Если подходящая ветка не найдена и нет default, PHP выбросит ошибку UnhandledMatchError.

Пример: замена switch на match

Сначала посмотрим на классический вариант через switch:

<?php
$role = 'admin';

switch ($role) {
    case 'admin':
        $access = 'Полный доступ';
        break;
    case 'manager':
        $access = 'Доступ к заказам';
        break;
    case 'user':
        $access = 'Личный кабинет';
        break;
    default:
        $access = 'Нет доступа';
}

echo $access;

Теперь тот же код через match:

<?php
$role = 'admin';

$access = match ($role) {
    'admin' => 'Полный доступ',
    'manager' => 'Доступ к заказам',
    'user' => 'Личный кабинет',
    default => 'Нет доступа',
};

echo $access;

Второй вариант короче и читается как таблица соответствий: значение слева — результат справа.

Строгое сравнение: важное отличие

Одна из причин использовать match — предсказуемость. В отличие от switch, он сравнивает значения строго.

<?php
$value = '1';

$result = match ($value) {
    1 => 'Число один',
    '1' => 'Строка один',
    default => 'Другое значение',
};

echo $result; // Строка один

Это особенно полезно при обработке данных из форм, API и базы данных, где число 1 и строка '1' могут иметь разный смысл.

Несколько значений в одной ветке

Если несколько вариантов должны давать один результат, перечислите их через запятую.

<?php
$httpCode = 404;

$type = match ($httpCode) {
    200, 201 => 'Успешный ответ',
    400, 401, 403, 404 => 'Ошибка клиента',
    500, 502, 503 => 'Ошибка сервера',
    default => 'Неизвестный код',
};

echo $type;

Такой подход удобно использовать для HTTP-кодов, ролей пользователей, статусов заказов и категорий ошибок.

match (true): проверки диапазонов и условий

Обычно match сравнивает конкретное значение. Но иногда нужно проверить диапазон: например, определить скидку по сумме заказа. Для этого используют приём match (true).

<?php
$total = 7500;

$discount = match (true) {
    $total >= 10000 => 15,
    $total >= 5000 => 10,
    $total >= 1000 => 5,
    default => 0,
};

echo 'Скидка: ' . $discount . '%';

Важно: PHP проверяет ветки сверху вниз. Поэтому условия нужно располагать от более специфичных к более общим. Если поставить $total >= 1000 первым, остальные условия уже не сработают.

Практический пример: валидация поля формы

Рассмотрим простой пример: пользователь вводит возраст, а мы хотим вывести понятное сообщение.

<?php
$age = 17;

$message = match (true) {
    $age < 0 => 'Возраст не может быть отрицательным',
    $age < 18 => 'Доступ только с 18 лет',
    $age <= 120 => 'Возраст принят',
    default => 'Проверьте корректность возраста',
};

echo $message;

Такой код компактнее длинной цепочки if / elseif, но остаётся понятным. Главное — не превращать match в сложную головоломку с десятками условий.

Ошибка UnhandledMatchError

Если match не найдёт подходящую ветку и не будет default, возникнет ошибка.

<?php
$status = 'archived';

$text = match ($status) {
    'new' => 'Новый',
    'paid' => 'Оплачен',
};

// Fatal error: UnhandledMatchError

В учебных примерах это может быть полезно: ошибка сразу показывает, что вы забыли обработать вариант. Но в реальном приложении чаще добавляют default или заранее валидируют данные.

Когда использовать match, а когда if

match хорошо подходит, когда вы выбираете одно значение из набора вариантов:

  • название статуса по коду;
  • сообщение по роли пользователя;
  • класс CSS по типу уведомления;
  • размер скидки по диапазону суммы;
  • обработчик по типу действия.

А вот если внутри веток нужно выполнять много действий: отправлять письма, писать в лог, менять несколько объектов — чаще лучше использовать if, отдельные функции или классы.

Советы и лучшие практики

  • Используйте match для вычисления значения, а не для длинных сценариев с побочными эффектами.
  • Добавляйте default, если входные данные приходят от пользователя или внешнего API.
  • Помните про строгое сравнение: 1 и '1' — разные значения.
  • В match (true) ставьте более строгие условия выше.
  • Не бойтесь заменить громоздкий switch на match, если результатом каждой ветки является одно значение.

Если вы хотите не просто выучить отдельные конструкции, а уверенно собрать полноценный сайт с авторизацией, базой данных и практическими задачами, посмотрите курс PHP и MySQL с нуля до уверенной разработки. Он хорошо дополняет изучение таких тем, как match, формы, работа с БД и архитектура PHP-приложений.

Итог

match в PHP 8 — удобная современная альтернатива switch для ситуаций, где нужно выбрать и вернуть значение. Он короче, использует строгое сравнение, не требует break и помогает писать более предсказуемый код. Начните с простых таблиц соответствий, затем используйте match (true) для диапазонов — и ваши условия в PHP станут чище и понятнее.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (https://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: https://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: https://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.