PHP Выражение соответствия - Match vs Switch

PHP Выражение соответствия - Match vs Switch

Содержание
  1. Давайте поговорим о различиях.

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

Отличная работа 👨‍💻