Выражение 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 вы можете выполнить несколько операторов.