# PHP 8.1 - Match Yapısı

Canonical: https://kaantanis.com/bloglar/php/php-81-match-yapisi

Yayın tarihi: 2024-10-03

Etiketler: PHP

Yazar: Kaan Tanış

Switch'in üç derdi var: break unutursanız alt satıra düşer, karşılaştırma gevşektir (1 ile '1' aynı sayılır), değer döndürmez. Match üçünü de çözüyor.Temel hali$result = match($deger) {
 durum1 => sonuc1,
 durum2 => sonuc2,
 durum3 => sonuc3,
 default => varsayilanSonuc, // optional
};Break yok, her dal otomatik bitiyor. Karşılaştırma strict, yani tip de kontrol ediliyor. Ve bir ifade olduğu için sonucu direkt değişkene atayabiliyorsunuz.Strict karşılaştırma farkı$value = '1';

$result = match ($value) {
 1 => 'integer 1',
 '1' => 'string 1',
};

// $result = 'string 1' döner.Aynı kodu switch ile yazsaydınız 'integer 1' dönerdi, çünkü switch gevşek karşılaştırır. Hangisi doğru derseniz, genelde istediğiniz strict olandır.Switch ile yan yanaswitch ($status) {
 case 'active':
 $message = 'User is active';
 break;
 case 'inactive':
 $message = 'User is inactive';
 break;
 default:
 $message = 'Status unknown';
}

$message = match ($status) {
 'active' => 'User is active',
 'inactive' => 'User is inactive',
 default => 'Status unknown',
};Aynı iş, yarı satır. Göz de daha rahat okuyor.Nerede işime yarıyorDurum kodlarını mesaja çevirmek, rol bazlı yetki belirlemek, enum ile birlikte tip güvenli dallanma yapmak. Birden fazla değeri aynı sonuca bağlayabiliyorsunuz:$type = match($value) {
 1, 2, 3 => 'Low',
 4, 5, 6 => 'Medium',
 7, 8, 9 => 'High',
};

$statusCode = 404;

$message = match($statusCode) {
 200 => 'OK',
 404 => 'Not Found',
 500 => 'Server Error',
 default => 'Unknown status code',
};PHP 8.1'in enum'larıyla birlikte kullanımı da temiz:enum UserStatus {
 case Active;
 case Inactive;
 case Banned;
}

$status = UserStatus::Banned;

$message = match($status) {
 UserStatus::Active => 'User is active',
 UserStatus::Inactive => 'User is inactive',
 UserStatus::Banned => 'User is banned',
};Yeni kodda switch yazmak için pek sebep kalmadı. Match daha kısa, daha güvenli, daha okunaklı.
