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) попередить ще до запуску.