PHP 8'in sevdiğim özelliklerinden biri match. İlk bakışta switch'in makyajlı hâli gibi görünse de aslında üç önemli fark var: katı karşılaştırma, dönüş değeri ve zorunlu kapsayıcılık.
Klasik switch'in dertleri
switch ($durum) {
case "aktif":
$renk = "yeşil";
break; // break unutulursa alttaki case de çalışır!
case "beklemede":
$renk = "sarı";
break;
default:
$renk = "gri";
}switch gevşek karşılaştırma (==) yapar: case 0, "aktif" gibi bir dizgeyle bile eşleşebilir (PHP 7 ve öncesinde). Bu, üretimde bulması çok zor hatalara yol açar.
match ile aynı iş
$renk = match ($durum) {
"aktif" => "yeşil",
"beklemede" => "sarı",
default => "gri",
};Üç satırda bitti; break yok, değişkeni her dalda ayrı ayrı atama derdi yok. Üstelik match katı karşılaştırma (===) yapar ve eşleşme bulunamazsa (default da yoksa) UnhandledMatchError fırlatır - hata sessizce yutulmaz.
Karşılaştırma tablosu
| Özellik | switch | match |
|---|---|---|
| Karşılaştırma | Gevşek (==) | Katı (===) |
| Dönüş değeri | Yok | Var |
| break gerekir mi? | Evet | Hayır |
| Eşleşme yoksa | Sessizce geçer | Hata fırlatır |
Birden çok değeri aynı dala bağlamak için virgül kullanın: "a", "b" => sonuc
match ne zaman uygun değil?
Her dalda birden çok satır kod çalıştırmanız gerekiyorsa match zorlamayın; okunabilirlik için klasik if/switch hâlâ yerinde olabilir. match, değer üretme senaryolarında parlar.
