Ответ
match() — это выражение для сопоставления с образцом, введенное в PHP 8. Оно позволяет компактно сопоставить значение с набором условий и вернуть результат.
Основные особенности:
- Выражение, а не оператор: Результат
matchможно использовать напрямую (присваивать, возвращать из функции). - Строгая типизация: Сравнение происходит через
===. - Компактный синтаксис: Не требует
breakи менее многословен, чемswitch. - Исключение при несовпадении: Если совпадений нет и отсутствует
default, выбрасываетсяUnhandledMatchError.
Практический пример с обработкой статуса заказа:
function getOrderStatusText(string $status): string {
return match ($status) {
'new' => 'Order received',
'processing' => 'Preparing your order',
'shipped' => 'On the way',
'delivered' => 'Delivered',
'cancelled' => 'Cancelled',
default => throw new InvalidArgumentException('Invalid order status'),
};
}
echo getOrderStatusText('shipped'); // On the way
Сравнение нескольких значений и использование условий:
$discount = match (true) {
$user->isPremium() && $total > 1000 => 0.15, // 15%
$total > 500 => 0.10,
$total > 100 => 0.05,
default => 0.0,
};