Switch vs Match
// switch — нестрого, fall-through, не возвращает
switch ($status) {
case 'active': $label = 'Active'; break;
case 'banned': $label = 'Banned'; break;
default: $label = 'Unknown';
}
// match — строго, без fall-through, возвращает
$label = match($status) {
'active' => 'Active',
'banned' => 'Banned',
'pending', 'unverified' => 'Waiting', // несколько условий
default => 'Unknown',
};
Преимущества
- Строгое сравнение:
match(0) ≠ match('foo')
- Если нет совпадения и нет
default — бросается UnhandledMatchError
- Компактный, читаемый код