PHP 8 match ifadesini ilk defa kullanıyorum

Özgün – Dev

PHP 8.0 ile birlikte eklenen switch yerine kullanılabilecek match ifadesini ilk defa bu yazıyla birlikte inceleyeceğim. Aslında heyecan ile beklediğim bu ifadeyi 8.1'de çıkacağını zannettiğim için (😅) henüz kullanmamıştım. Lets dive in ⚡

(yani haydi dalalım aman allahım neden duruyoruz ki)

Bu yazının bilgi içeriği büyük oranda Brendt'in PHP 8: match or switch? yazısından çevrilmiştir.

TL;DR veya NTL;SIDR

Match, genellikle switch'ten daha iyi bir tercih olacak, break deyimi gerektirmeyen, bir satırda birden fazla case belirtilebilen ve direkt atanan değer döndüğü için yalnızca bir kere değer tanımlamanın yeterli olduğu, switch'e göre çok daha kısa bir ifade.

PHP dokümantasyonundan alınmış bir yapı örneği:

$return_value = match ($food) {
    'apple' => 'This food is an apple',
    'bar' => 'This food is a bar',
    'cake' => 'This food is a cake',
};

Switch ile karşılaştıralım

Büyülü bir switch örneği:

Daha da büyülü match karşılığı:

No type coercion

Match kontrolleri strict olarak yapıyor, bu da aynı == yerine === kullanmak gibi. Case'lerde verilen type'lar birebir eşleşmeli.

Unknown values cause errors

Şartlarda tanımlanmayan bir değer sorulduğunda, default case de tanımlanmadıysa Match üzerimize bir UnhandledMatchError Exception fırlatıyor.

Güzel ama ingiliççe köşesi

$translations = [
            'translation' => 'çeviri',
            'match' => 'eşleştirmek',
            'switch' => 'dedişme, anahtar, şalter: burdan verdiğim değer şartlardan birinden çıksın',
            'break' => 'kır, boz, dur',
            'strict' => 'sıkı, harfi harfine',
            'case' => 'durum, vaka: ihtimal',
            'magic' => 'büyü',
            'description' => 'açıklama',
            'count' => 'sayı',
            'answer' => 'cevap',
            'default' => 'varsayılan',
            'lordsoftherings' => 'yüzüklerin efendileri',
            'exception' => 'istisna, sıradışı durum',
            'tl;dr' => 'too long did not read: çok uzun okumayayım şimdi tadım kaçmasın',
            'ntl;sidr' => 'not too long still i did not read: çok da uzun değil ama yine de okumadım',
            'no type coercion' => 'otomatik type dönüşümü yok: yani mahalle kavgası yok',
            'unknown values cause errors' => 'bilinmeyen değerler hataya yol açar: gönlümde'
        ];