Menu

PHP switch case: case, break ve Fallthrough

switch ($value) tek bir değeri bir case etiketleri listesiyle karşılaştırır ve kodu ilk eşleşmeden bir break ifadesine kadar çalıştırır. Birden çok case, fallthrough, default, switch(true) ve switch'in neden gevşek == karşılaştırması kullandığı.

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

switch ($value) tek bir değeri bir case etiketleri listesiyle karşılaştırır ve eşleşen ilk etiketin altındaki kodu çalıştırır. Her case break ile biter; default hiçbir şeyle eşleşmeyen her şeyi ele alır.

$day değerini 'fri', 'sun' veya 'wed' yapıp tekrar çalıştırın. default case son sıradaysa break gerektirmez.

Bir blok için birden çok case

Aynı kodu birkaç değer için çalıştırmak için case etiketlerini aralarında hiçbir şey olmadan alt alta yazın. Eşleşen bir etiket altındaki koda devam eder.

match ifadesinin aksine switch'te case 'jpg', 'jpeg': virgül sözdizimi yoktur. Alt alta etiketler tek yoldur.

Fallthrough: break olmadan ne olur

Bir switch'i durduran break ifadesidir. O olmadan PHP eşleşen case'i çalıştırır, sonra etiketlerini yok sayarak altındaki her case'e devam eder; ta ki bir break veya sona ulaşana kadar.

Buradaki fallthrough bilerek yapılmıştır: her plan kendi özelliklerini ve daha ucuz planlardaki her şeyi alır. Bunu bilerek yazdığınızda, bir sonraki okuyucu onu "düzeltmesin" diye // no break gibi bir yorum ekleyin. Kastetmediğinizde ise eksik bir break en yaygın switch hatalarından biridir.

switch gevşek karşılaştırma (==) kullanır

Her case, === ile değil == ile kontrol edilir. Sayısal bir string bir sayıyla, null false ve "" ile, true ise true sayılan her değerle eşleşir. İki operatörü karşılaştırmak için hücrelere dokunun.

switch == ile, match === ile karşılaştırır
Point at or tap a cell to read it as PHP.
$a == $b01"0""1"""nullfalsetrue"a""10""1e1"
0
1
"0"
"1"
""
null
false
true
"a"
"10"
"1e1"
Every cell computed by PHP 8.3.19.

Pratik sonucu: bir formdan gelen "1" girdi stringi hiçbir dönüşüm olmadan case 1: içine düşer; bu çoğu zaman istediğiniz şeydir. Ama boş olmayan bir stringle switch (true) ya da case false: ile karşılaşan null beklemediğiniz bir case'i seçebilir.

null satırına dikkat edin: case false: satırına hiç ulaşmaz, çünkü null == 0 zaten true'dur ve case 0: önce gelir. Gevşek karşılaştırmada case'lerin sırası sonucu değiştirir. PHP 8'den beri 0 == "a" false'tur (PHP 7'de true idi), bu yüzden sayısal olmayan bir string artık case 0: ile eşleşmez. === gerekiyorsa bu sayfanın sonunda anlatılan bir match ifadesi kullanın.

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

Bir case etiketi herhangi bir ifade olabilir. switch (true) ile her case bir koşuldur ve true değerine eşit olan ilki kazanır.

Her case'in gerçek bir boolean olduğundan emin olun. Gevşek karşılaştırma nedeniyle case $name:, $name boş olmayan bir string olduğunda her zaman eşleşirdi.

Döngü içinde switch: break ve continue

Bir döngünün içinde, switch içindeki break yalnızca switch'ten çıkar, döngüden değil. Döngüyü durdurmak için break 2 kullanın. Bir switch içindeki continue, break gibi davranır ve PHP derleme zamanında şu uyarıyı verir: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"?. Döngünün bir sonraki adımına geçmek için continue 2 yazın.

switch ile match

PHP 8, switch'in kullanımlarının çoğunu daha az kodla karşılayan match ifadesini ekledi. === ile karşılaştırır, bir değer döndürür, asla aşağı düşmez, virgülle ayrılmış koşullara izin verir ve hiçbir şey eşleşmediğinde bir UnhandledMatchError fırlatır; böylece unutulmuş bir case sessizce geçemez.

Bir case birkaç ifade gerektirdiğinde ya da plan örneğindeki gibi fallthrough'un kendisi amaç olduğunda switch'i kullanın. Bir değeri bir sonuca eşlemek için match daha kısa ve daha güvenlidir.

Sıkça Sorulan Sorular

PHP switch'te bir blok için birden çok case nasıl kullanılır?

case etiketlerini aralarında kod olmadan alt alta yazın: case 'sat': case 'sun': echo 'weekend'; break;. Her etiket ortak koda düşer. PHP'de switch için case 'sat', 'sun': sözdizimi yoktur; o virgüllü biçim match ifadesine aittir.

PHP switch katı karşılaştırma mı kullanır?

Hayır. switch gevşek == ile karşılaştırır, bu yüzden case '1': tam sayı 1 ile, case 0: ise '0' ile eşleşir. Katı === karşılaştırması için bir match ifadesi ya da her case içinde === olan switch (true) kullanın.

PHP switch'te break'i unutursam ne olur?

Çalışma aşağı düşer: eşleşen case'den sonra PHP, bir break, bir return veya switch'in sonuna ulaşana kadar altındaki her case'in kodunu çalıştırmaya devam eder. Bazen bu istenen şeydir, ama genellikle bir hatadır.

PHP switch büyüktür gibi aralıkları kontrol edebilir mi?

Evet, switch (true) ile: her case, case $score >= 90: gibi bir koşul tutar ve true olan ilki çalışır. Bir match (true) ifadesi aynı işi katı karşılaştırmayla yapar ve bir değer döndürür.

Coddy programlama dilleri çizimi

Coddy ile kodlamayı öğren

BAŞLA