Kaan Tanış, Mersin’de freelance web tasarım, yazılım geliştirme ve mobil uygulama üreten full-stack geliştirici ve UI tasarımcısıdır.

PHP 8.1 - Match Yapısı

PHP 8.1 - Match Yapısı

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 yana

switch ($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ıyor

Durum 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ı.

İlgili Yazılar

Yorum Yap

Yorumunuz onaylandıktan sonra yayınlanacaktır. Bildirim almak isterseniz e-posta adresinizi girebilirsiniz.