Содержание
Выражение Match по сути то же самое, что и оператор Switch, и было введено в PHP 8.
Ключевое слово - match, поэтому давайте воссоздадим оператор switch ниже:
$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;
Давайте поговорим о различиях.
Первое отличие заключается в том, что выражение match на самом деле является выражением и оценивается как значение, поэтому его можно присвоить переменной. Это практически может быть любого типа выражением; например, мы можем использовать функцию, которая возвращает значение.
Второе отличие заключается в том, что для предотвращения непредвиденных последствий, таких как оценка других случаев, в операторе switch необходимо использовать оператор break, в то время как оператор match возвращает значение, как только найдено совпадение.
Третье отличие заключается в том, что в операторе switch значение по умолчанию не требуется, в то время как в операторе match генерируется фатальная ошибка, если соответствующее совпадение не найдено в каком-либо из перечисленных случаев, и значение по умолчанию не указано.
Четвертое отличие заключается в том, что выражение match выполняет строгое сравнение, в то время как оператор switch выполняет нестрогое сравнение. На обеих сторонах могут быть сложные выражения, вызовы функций, логические операторы, использованные внутри условного выражения.
$paymentStatus = false;
// switch print 'Pending Payment'
// match print 'Unknown Payment Status'
Одним из важных моментов является то, что выражение match не делает устаревшим оператор switch, так как у него по-прежнему есть свои области применения. Например, выражение match возвращает значение, как только найдено совпадение, в то время как с оператором switch вы можете выполнять несколько операторов.
Отличная работа 👨💻