Bốn khác biệt cần nêu được:
1. So sánh nghiêm ngặt. match dùng ===, switch dùng ==. Đây là điểm hay bị hỏi lại.
2. Là biểu thức (expression). match trả về giá trị, gán thẳng vào biến hoặc return được. switch là câu lệnh.
3. Không fall-through. Không cần break; mỗi nhánh là một biểu thức duy nhất.
4. Không khớp thì ném lỗi. Nếu không nhánh nào khớp và không có default, PHP ném UnhandledMatchError thay vì im lặng bỏ qua như switch.
php
$status = '1';
switch ($status) {
case 1: $label = 'paid'; break; // trúng: '1' == 1
default: $label = 'unknown';
}
$label = match ($status) {
1 => 'paid', // KHÔNG trúng: '1' !== 1
default => 'unknown',
};Có thể gom nhiều giá trị vào một nhánh: 1, 2 => 'active'.
- Dùng
match (true)khi cần điều kiện thay vì so khớp giá trị. - Mặc định nên chọn
match; chỉ giữswitchkhi một nhánh cần chạy nhiều câu lệnh.