Menu

PHP match İfadesi: match ile switch Farkı, match(true)

match ($x) { 1, 2 => 'low', default => 'other' } bir değeri katı === ile karşılaştırır, eşleşen ilk kolun sonucunu döndürür ve hiçbir şey eşleşmezse UnhandledMatchError fırlatır. match ile switch farkı, match(true) ve enum ile match.

Bu sayfada çalıştırılabilir editörler var - düzenle, çalıştır ve sonucu anında gör.

match ($value) { ... } bir değeri katı === ile bir kol listesiyle karşılaştırır ve eşleşen ilk kolun sonucunu döndürür. Birden çok değer aynı kolu paylaşabilir, default geri kalanları yakalar ve hiçbir şey eşleşmezse PHP bir UnhandledMatchError fırlatır.

Kapanış süslü parantezinden sonraki noktalı virgüle dikkat edin: match bir ifadedir, tıpkı 1 + 2 gibi, bu yüzden bütünü tek bir atama deyimidir. Her kol values => result biçimindedir, kollar virgülle ayrılır ve son koldan sonra bir virgül bırakmaya izin verilir.

Bir kolda birden çok değer

Değerleri virgülle listeleyin. Konu değeri bunlardan herhangi biriyle özdeşse (===) kol eşleşir.

Burada olduğu gibi match sonucunu doğrudan bir fonksiyondan döndürmek, onu kullanmanın en yaygın yoludur.

match ile switch karşılaştırması

Aynı eşleme iki şekilde yazılmış, en büyük farkı gösteren bir girdiyle: karşılaştırma. switch == kullanır, bu yüzden "1" dizgesi case 1 ile eşleşir. match === kullanır, bu yüzden eşleşmez.

matchswitch
Karşılaştırmakatı ===gevşek ==
Sonuçbir değer döndürürdeyimdir, hiçbir şey döndürmez
Düşme (fallthrough)aslaevet, break gelene kadar
Birden çok değer1, 2 =>üst üste case 1: case 2:
Eşleşme yokUnhandledMatchError fırlatırhiçbir şey yapmaz
Bir dalın gövdesitek bir ifadeistediğiniz sayıda deyim

Bir değeri başka bir değere dönüştürürken match kullanın. Bir dal birden çok deyim gerektiriyorsa ya da düşme davranışı zaten amaçsa switch ile devam edin; switch sayfası iki durumu da gösterir.

UnhandledMatchError: hiçbir kol eşleşmediğinde

default kolu yoksa hiçbir şeyle eşleşmeyen bir değer sessiz bir null değil, bir hatadır. Bu bir özelliktir: yeni bir durum kodu veya bir yazım hatası gözden kaçmak yerine açıkça hata verir.

PHP PHP Fatal error: Uncaught UnhandledMatchError: Unhandled match case of type string ile durur. Bir geliştirme ortamı (zend.exception_ignore_args kapalıyken) bunun yerine değeri adıyla verir: Unhandled match case 'XL'. Bunu ya default => 'other' ekleyerek ya da bilinmeyen bir değerin beklendiği yerde hatayı yakalayarak düzeltin:

Aralıklar ve koşullar için match(true)

match konu değerini her kolla karşılaştırır; konu değeri true ise her kol bir koşul olabilir. Tam olarak true olarak değerlendirilen ilk koşul kazanır.

O blokta iki ayrıntı var. throw PHP 8'den beri bir ifadedir, bu yüzden bir kolun sonucu olabilir. Ayrıca karşılaştırma katı olduğu için her koşul gerçek bir boolean döndürmelidir: $name => ... gibi bir kol, $name boş olmayan bir dizge olsa bile true ile asla eşleşmez. Yalnızca eşleşen kol değerlendirilir, bu yüzden throw yalnızca negatif bir yaş için çalışır.

Enum ile match

match ve enum'lar birbirine uyar: bir enum metodu içinde match ($this) her case'i bir değere eşler. Enum'ların kendisi için PHP enum'ları sayfasına bakın.

Burada default bilerek yok. Biri daha sonra beşinci bir case eklerse, onun üzerinde color() çağırmak yanlış bir renk döndürmek yerine hata fırlatır.

Bir kolda birden çok deyim

Bir kol tek bir ifade tutar, bu yüzden 'save' => { ...; ... } geçerli PHP değildir. İşi bir fonksiyona taşıyın ve koldan çağırın. Eşleşmeyen kolların fonksiyonları asla çağrılmaz.

$format değerini 'json' veya 'xml' yapın ve tekrar çalıştırın.

Sıkça Sorulan Sorular

PHP'de match ile switch arasındaki fark nedir?

match katı === ile karşılaştırır, bir değer döndürür, asla bir sonraki kola düşmez, bir kolda virgülle ayrılmış birden çok değer kabul eder ve hiçbir kol eşleşmezse UnhandledMatchError fırlatır. switch gevşek == ile karşılaştırır, hiçbir şey döndürmeyen bir deyimdir, break olmadan bir sonraki case'e düşer ve hiçbir case eşleşmezse sessizce hiçbir şey yapmaz.

PHP match ifadesinde hiçbir kol eşleşmezse ne olur?

PHP bir UnhandledMatchError fırlatır. Diğer tüm değerleri karşılamak için bir default => ... kolu ekleyin ya da hatayı try { ... } catch (\UnhandledMatchError $e) { ... } ile yakalayın.

PHP'de match'i büyüktür gibi koşullarla nasıl kullanırım?

true ile eşleştirin: match (true) { $age < 13 => 'child', $age < 18 => 'teen', default => 'adult' }. Her kol bir koşuldur ve tam olarak true olan ilk koşul kazanır.

PHP'de bir match kolu birden çok deyim çalıştırabilir mi?

Hayır, her kol tek bir ifadedir. Deyimleri bir fonksiyona veya metoda koyun ve koldan çağırın, örneğin 'export' => exportCsv($rows).

match hangi PHP sürümünde geldi?

PHP 8.0. PHP 7'de aynı mantık için bir switch deyimi ya da $labels[$status] ?? 'Unknown' gibi bir dizi araması gerekir.

Coddy programlama dilleri çizimi

Coddy ile kodlamayı öğren

BAŞLA