Ответ
match — это выражение для условного сопоставления, появившееся в PHP 8.0. Оно является более строгой и выразительной альтернативой оператору switch.
Ключевые отличия от switch:
- Возвращает значение:
match— это выражение, результат которого можно присвоить переменной. - Строгое сравнение: Используется оператор
===(идентично), а не==(равно). - Нет проваливания (fall-through): Каждая ветка выполняется независимо, не требуется
break. - Обязательное совпадение: Если ни одно условие не совпало и не указана ветка
default, будет выброшено исключениеUnhandledMatchError.
Пример использования:
$httpCode = 404;
$message = match ($httpCode) {
200, 201 => 'Success',
301 => 'Moved Permanently',
404 => 'Not Found',
500 => 'Internal Server Error',
default => 'Unknown HTTP Code',
};
echo $message; // Выведет: Not Found
Поддержка выражений в условиях:
$result = match (true) {
$age < 18 => 'Minor',
$age >= 18 && $age < 65 => 'Adult',
default => 'Senior',
}; Ответ 18+ 🔞
А, ну это же про match в PHP! Ёпта, наконец-то додумались сделать нормальную штуку вместо этого старого switch, который только и умел, что баги плодить. Слушай, как будто на дворе 2002-й год — до сих пор некоторые switch используют, а потом удивляются, почему код ведёт себя как пизда с ушами.
В общем, match — это типа условное сопоставление, в PHP 8.0 его запилили. По сути, это строгая и умная замена тому убогому switch. Представь, что switch — это такой распиздяй, который постоянно проваливается куда не надо, а match — это дисциплинированный солдат, который делает всё чётко и возвращает результат.
Чем он круче этого старого switch:
- Возвращает значение: Это выражение, ёпта! То есть результат можно сразу в переменную воткнуть, не надо никаких костылей. Удобно же, блядь!
- Строгое сравнение: Работает через
===(идентично), а не через это кривое==, которое может тебе сюрприз подкинуть. Никаких неожиданных приведений типов, всё честно. - Нет проваливания (fall-through): Вот это вообще главная фишка. Каждая ветка выполняется отдельно, и не надо после каждого
caseэтот ёбаныйbreakставить. Забылbreak— получил хиросиму в коде. Вmatchтакого нет, живи спокойно. - Обязательное совпадение: Если ни одно условие не подошло и
defaultне указал — получишь исключениеUnhandledMatchErrorпрямо в ебало. Жёстко, зато честно. Не как вswitch, который молча сожрёт всё и будет работать дальше, а ты потом будешь искать, почему нихуя не работает.
Смотри, как это выглядит на практике:
$httpCode = 404;
$message = match ($httpCode) {
200, 201 => 'Success',
301 => 'Moved Permanently',
404 => 'Not Found',
500 => 'Internal Server Error',
default => 'Unknown HTTP Code',
};
echo $message; // Выведет: Not Found
Видишь? Красиво, ёпта. Никакого лишнего говна. Присвоили и пошли дальше.
А ещё там можно в условиях выражения пихать, это вообще овердохуища! Смотри:
$result = match (true) {
$age < 18 => 'Minor',
$age >= 18 && $age < 65 => 'Adult',
default => 'Senior',
};
Вот это уже мощь! По сути, заменяет кучу if-elseif, только выглядит в разы аккуратнее. В общем, match — это однозначно шаг вперёд. Кто ещё использует switch для новых проектов — тот, прости, полупидор. Всё, я сказал.