Выражение Match по сути аналогично оператору Switch и появилось в PHP 8.

Ключевое слово — match, поэтому давайте воссоздадим оператор переключения ниже:

$paymentStatus = 1;

switch ($paymentStatus) {
  case 1:
    echo 'Paid';
    break;
  case 2:
  case 3:
    echo 'Payment Declined';
    break;
  case 0:
    echo 'Pending Payment';
    break;
  default:
    echo 'Unknown Payment Status';
    break;
}
Внутри фигурных скобок мы формируем пары значений, где ключом является отдельное условное выражение, а значением — возвращаемое выражение.

$paymentStatusDisplay = match ($paymentStatus) {
  1 => 'Paid',
  2,3 => 'Payment Declined',
  0 => 'Pending Payment',
  default => 'Unknown Payment Status',
};
echo $paymentStatusDisplay;

Давайте поговорим о различиях

Первое отличие состоит в том, что выражение соответствия на самом деле является выражением и возвращает значение, поэтому его можно присвоить переменной. Это может быть практически любой тип выражения; например, мы могли бы использовать функцию, возвращающую значение.

Второе отличие состоит в том, что переключатель требует использования оператора Break, чтобы избежать некоторых неожиданных результатов, таких как оценка других операторов Case, в то время как оператор match возвращает значение, как только совпадение найдено.

Третье отличие состоит в том, что в операторе switch не требуется значение по умолчанию, тогда как в match генерируется фатальная ошибка, если соответствующее совпадение не найдено ни в одном из перечисленных случаев и не указано значение по умолчанию.

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

$paymentStatus = false;
// switch print 'Pending Payment'
// match print 'Unknown Payment Status'

Следует отметить, что выражение match не исключает использования оператора switch, поскольку у него все еще есть варианты использования. Например, match возвращает значение, как только совпадение найдено, тогда как с помощью switch вы можете выполнить несколько операторов.