Выражение match в PHP
Выражение
match предоставляет новый способ обработки множественных условных проверок
(как оператор switch).
Выражение
match вычисляет выражение по нескольким альтернативам
(используя строгое сравнение) и возвращает значение.
Совет:
Выражение match появилось в PHP 8.0.
Вот ключевые различия между
match и switch:
- Выражение
matchимеет более читаемый синтаксис, чемswitch - Выражение
matchвозвращает значение, в то время какswitchне возвращает - Выражение
matchавтоматически прерывается после совпадения, в то время какswitchтребуетbreak; - Выражение
matchиспользует строгое сравнение (===), в то время какswitchиспользует нестрогое сравнение (==)
Синтаксис match
$результат = match($выражение) {
условие1 => возвращаемое_значение1,
условие2 => возвращаемое_значение2,
условие3, условие4 => возвращаемое_значение3,
default => значение_по_умолчанию,
}
Совет: Ветка default обрабатывает все выражения, которые не были сопоставлены.
Следующий пример эквивалентен примеру на странице
switch, но
здесь мы используем выражение match:
Пример
$favcolor = "red";
$text = match($favcolor) {
"red" => "Your favorite color is red!",
"blue" => "Your favorite color is blue!",
"green" => "Your favorite color is green!",
default => "Your favorite color is neither red, blue, nor green!",
};
echo $text;
Попробуйте сами »
Сопоставление нескольких значений
Если вы хотите, чтобы выражение match сопоставляло несколько значений для одного и того же блока кода, вы можете
сгруппировать их с помощью запятых, например:
Пример
Сопоставление нескольких значений:
$d = 3;
$text = match($d) {
1, 2, 3, 4, 5 => "The week feels so long!",
6, 0 => "Weekends are best!",
default => "Invalid day",
};
echo $text;
Попробуйте сами »
Ключевое слово default
В выражении match должно быть условие,
которое соответствует выражению, или ветка default, чтобы
обработать его.
Если нет совпадений и нет ветки default, выражение match
выбрасывает исключение UnhandledMatchError.
Пример
Это выбросит исключение UnhandledMatchError:
$favcolor = "pink"; // ни одно условие не будет соответствовать этому
try {
$text = match($favcolor) {
"red" => "Your favorite color is red!",
"blue" => "Your favorite color is blue!",
"green" => "Your favorite color is green!",
};
} catch (\UnhandledMatchError $e) {
var_dump($e);
}
echo $text;
Попробуйте сами »