Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти Інструменти Події
Інше
Про нас Реклама

Як працює match і чим він кращий за switch?

match (PHP 8.0) - вираз, що повертає значення залежно від умови:

$label = match ($status) {
    'new', 'pending' => 'Очікує',
    'paid' => 'Оплачено',
    'cancelled' => 'Скасовано',
};

Відмінності від switch:

  • Строге порівняння ===. switch порівнює через ==, тож switch ('1') спрацює на case 1, а switch (0) у PHP 7 - навіть на case 'abc'.
  • Повертає значення - його можна присвоїти чи повернути одразу. switch - інструкція.
  • Немає провалювання (fall-through) і не потрібен break. Забутий break у switch - класичний баг.
  • Необроблене значення - виняток UnhandledMatchError. switch без default просто нічого не робить, і помилка залишається непомітною.
  • Кілька умов через кому в одній гілці.

match (true) - заміна ланцюжку if/elseif з довільними умовами:

$grade = match (true) {
    $score >= 90 => 'A',
    $score >= 75 => 'B',
    $score >= 60 => 'C',
    default => 'F',
};

Обмеження: у кожній гілці - один вираз. Якщо гілці потрібно кілька інструкцій, - викликати метод або лишити if/switch.

У поєднанні з enum match без default - спосіб гарантувати, що кожен варіант оброблено: новий case без гілки дасть UnhandledMatchError, а статичний аналізатор (PHPStan) попередить ще до запуску.

Докладніше в документації: match

Перевір себе

20 випадкових питань за спробу, після завершення - розбір кожної помилки

Схожі питання