Оператор match в PHP

Введение

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

Описание оператора match

Оператор match представляет собой выражение, которое может быть использовано вместо серии условий. Он возвращает значение в зависимости от результата выражения.

$result = match ($value) {
    1, 2, 3 => 'маленькое число',
    4, 5, 6 => 'среднее число',
    default => 'большое число',
};

Сравнение match и switch

  • match возвращает значение, в то время как switch этого не делает.
  • match поддерживает комбинированные условия (например, 1, 2, 3 => ...).
  • В match нет необходимости в использовании break.
  • match более строг к типам данных.

Оператор match в PHP вводит строгую проверку типов, что отличает его от оператора switch. Это значит, что match будет сравнивать значения на идентичность (используя ===), в то время как switch использует равенство по значению (используя ==).

Пример с switch:

$value = "5"; // строка

switch ($value) {
    case 5:
        echo "Это число 5";
        break;
    default:
        echo "Это не число 5";
}

В данном случае вывод будет "Это число 5", потому что switch использует == для сравнения, и строка "5" равна числу 5 по значению.

Пример с match:

$value = "5"; // строка

$result = match ($value) {
    5 => "Это число 5",
    default => "Это не число 5"
};

echo $result;

В этом случае вывод будет "Это не число 5", потому что match использует === для сравнения, и строка "5" не идентична числу 5.

Эта строгая проверка типов делает match более предсказуемым и надёжным в сравнении с switch, так как она уменьшает вероятность ошибок из-за неожиданных преобразований типов.

Простой примеры использования match

$day = 3;
$weekday = match($day) {
    1 => 'Понедельник',
    2 => 'Вторник',
    3 => 'Среда',
    4 => 'Четверг',
    5 => 'Пятница',
    6 => 'Суббота',
    7 => 'Воскресенье',
    default => 'Неизвестный день',
};

echo $weekday; // Среда

Сложный примеры использования match

$type = gettype($value);
$result = match($type) {
    'integer', 'double' => 'Это число',
    'string' => match(strlen($value)) {
        0 => 'Строка пуста',
        1 => 'Строка из одного символа',

        default => 'Строка длиннее одного символа',
    },

    default => 'Неизвестный тип',
};

Код выше представляет собой вложенное использование оператора match для определения типа переменной $value и выполнения дополнительной логики на основе этого типа.

Определение типа

$type = gettype($value);
  1. Функция gettype возвращает строковое представление типа переменной $value. Это может быть 'integer', 'double', 'string' и так далее.
  2. Основной match: Первый match сравнивает значение $type с несколькими известными типами.
    • Если $type равен 'integer' или 'double', match вернет строку "Это число".
    • Если $type равен 'string', то здесь начинается вложенный match, который проверяет длину строки.
  3. Вложенный match для строк: Если значение $value является строкой, тогда проверяем её длину:
    • Если длина строки равна 0, match вернет "Строка пуста".
    • Если длина строки равна 1, match вернет "Строка из одного символа".
    • В любом другом случае вернется "Строка длиннее одного символа".
  4. Значение по умолчанию: Если $type не соответствует ни одному из известных типов, match вернет "Неизвестный тип".

Заключение

Оператор match предоставляет более чистый и гибкий способ написания условий в PHP. Он может заменить многие структуры switch и упростить ваш код.

Написать комментарий