Выражение match в PHP
В PHP 8.0 появилось выражение match, близкий родственник switch. Есть три главных отличия: оно возвращает значение, сравнивает с помощью строгого сравнения (===) и не требует операторов break.
Простое выражение match
Значение $status определяет, какую строку вернёт match, и эта строка сохраняется в $text:
Вывод: PHP-скрипт
<?php
$status = 1;
$text = match($status) {
1 => "На старт",
2 => "Внимание",
3 => "Марш",
};
echo $text;
?>
Ключевое слово default
Ветвь default перехватывает всё, что не перехватили другие ветви. Её стоит добавлять, потому что если ни одна ветвь не подошла, а default нет, PHP выбрасывает ошибку UnhandledMatchError.
match с default
Ни одна ветвь не охватывает значение 5, поэтому результат даёт ветвь default:
Вывод: PHP-скрипт
<?php
$status = 5;
$text = match($status) {
1 => "На старт",
2 => "Внимание",
3 => "Марш",
default => "Неизвестно",
};
echo $text;
?>
Несколько значений в одной ветви
Одна ветвь может охватывать несколько значений: перечислите их через запятую. Эта ветвь выбирается, если выражение совпадает с любым из них.
match с несколькими значениями
Здесь дни сгруппированы в три ветви, а значения в каждой разделены запятыми:
Вывод: PHP-скрипт
<?php
$day = 2;
$text = match($day) {
1, 2 => "Начало рабочей недели",
3, 4, 5 => "Середина/конец рабочей недели",
6, 7 => "Выходные",
};
echo $text;
?>
Строгое сравнение
Поскольку match сравнивает с помощью ===, у значения должны быть правильными и тип данных, и содержимое. Инструкция switch менее требовательна, поскольку сравнивает нестрого (==).
Строгое сравнение в match
Строка "1" при строгом сравнении не совпадает с целым числом 1, поэтому используется ветвь default:
Вывод: PHP-скрипт
<?php
$status = "1";
$text = match($status) {
1 => "Совпадение с целым числом",
default => "Нет совпадения",
};
echo $text;
?>