Что такое match() в PHP 8?

«Что такое match() в PHP 8?» — вопрос из категории PHP Core, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

match() — это выражение для сопоставления с образцом, введенное в PHP 8. Оно позволяет компактно сопоставить значение с набором условий и вернуть результат.

Основные особенности:

  1. Выражение, а не оператор: Результат match можно использовать напрямую (присваивать, возвращать из функции).
  2. Строгая типизация: Сравнение происходит через ===.
  3. Компактный синтаксис: Не требует break и менее многословен, чем switch.
  4. Исключение при несовпадении: Если совпадений нет и отсутствует 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,
};