Оператор 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);
- Функция
gettype
возвращает строковое представление типа переменной$value
. Это может быть 'integer', 'double', 'string' и так далее. - Основной
match
: Первыйmatch
сравнивает значение$type
с несколькими известными типами.- Если
$type
равен 'integer' или 'double',match
вернет строку "Это число". - Если
$type
равен 'string', то здесь начинается вложенныйmatch
, который проверяет длину строки.
- Если
- Вложенный
match
для строк: Если значение$value
является строкой, тогда проверяем её длину:- Если длина строки равна 0,
match
вернет "Строка пуста". - Если длина строки равна 1,
match
вернет "Строка из одного символа". - В любом другом случае вернется "Строка длиннее одного символа".
- Если длина строки равна 0,
- Значение по умолчанию: Если
$type
не соответствует ни одному из известных типов,match
вернет "Неизвестный тип".
Заключение
Оператор match
предоставляет более чистый и гибкий способ написания условий в PHP. Он может заменить многие структуры switch
и упростить ваш код.