switch
(PHP 4, PHP 5, PHP 7, PHP 8)
switch
deyimi, aynı ifade içersinde yer alan bir dizi
IF deyimine benzer. Birçok durumda, aynı değişkeni (ya da ifadeyi)
birden çok değerle karşılaştırmak ve her karşılaştırmanın sonucunu
ayrı bir kod parçası çalıştırarak değerlendirmek istersiniz. İşte bu,
switch
deyiminin varlık sebebidir.
Bilginize:
Başka bazı dillerden farklı olarak, continue deyimi
switch
ile uygulanabilir ve
break
ile benzerlik gösterir. Bir döngü içerisinde
switch
kullandıysanız ve kodun yürütülmesine
dıştaki döngünün sonraki yinelemeden devam etmesini istiyorsanız,
continue 2
kullanabilirsiniz.
Bilginize:
switch
ve case
gevşek karşılaştırma
yapar.
Aşağıdaki iki örnek aynı şeyi yazmanın iki farklı yolunu göstermektedir.
Birincisi bir dizi if
ve elseif
deyiminin kullanımını, ikincisi ise switch
deyiminin
kullanımını örneklemektedir:
Örnek 1 - switch
yapısı
<?php
if ($i == 0) {
echo "i eşittir 0";
} elseif ($i == 1) {
echo "i eşittir 1";
} elseif ($i == 2) {
echo "i eşittir 2";
}
switch ($i) {
case 0:
echo "i eşittir 0";
break;
case 1:
echo "i eşittir 1";
break;
case 2:
echo "i eşittir 2";
break;
}
?>
Örnek 2 - switch
ile dizge kullanımı
<?php
switch ($i) {
case "elma":
echo "i bir elmadır";
break;
case "çikolata":
echo "i bir çikolatadır";
break;
case "kek":
echo "i bir kektir";
break;
}
?>
Hatalardan kaçınmak için switch
deyiminin nasıl
çalıştığını anlamak önemlidir. switch
deyimi satır
satır ele alınır (aslında deyim deyim). Başlangıçta, hiçbir kod
çalıştırılmaz. Yalnızca switch
ifadesiyle birlikte
verilen değer ile uyuşan case
deyimi bulunduğunda PHP
ilgili deyimleri çalıştırmaya başlar. PHP switch
bloğu sonlanana kadar ya da ilk break
deyimi ile
karşılaşıncaya kadar çalışmasına devam eder. Bir case bloğunun sonuna
break
koymazsanız, PHP sonraki
case
deyiminden kodları çalıştırmaya devam eder.
Örnek:
Burada, $i 0'a eşit ise, PHP tüm
echo
deyimlerini çalıştıracaktır!
$i 1'e eşit ise, PHP son iki echo
deyimini çalıştıracaktır! Beklediğiniz sonucu ('i eşittir 2' metninin
görüntülenmesi) yalnızca $i 2'ye eşitse almanız
mümkün olacaktır. Bu durumun oluşmaması için, break
deyimini kullanmayı unutmamanız önemlidir (yine de, bazı durumlarda
break
deyimini kullanmak istemeyebilirsiniz).
Bir switch
deyiminde, koşul yalnızca bir defa
sorgulanır ve sonuç her bir case
deyimi ile
karşılaştırılır. Bir elseif
deyiminde ise, koşul
tekrar sorgulanır. Kullanmak istediğiniz koşul basit bir karşılaştırma
işleminden daha karmaşıksa ve/veya bir döngü içerisindeyse,
switch
kullanmak daha hızlı olabilir.
case
bloğu kod içermeyebilir ve amacı yalnızca
denetimi bir sonraki case
bloğuna geçirmek olabilir.
default
durumu özel bir durumdur. Bu durum diğer
hiçbir case
ile uyuşmayan değerler için kullanılır ve
en sonda yer almalıdır. Örneğin:
Bilginize:
Çok sayıda default
kullanımı
E_COMPILE_ERROR
hatasını tetikler.
İki noktalı sözdizimi switch
deyimi için de
desteklenmektedir. Daha fazla bilgi için, Denetim yapıları için
diğer söz dizimi bölümünü inceleyebilirsiniz.
case
’ten sonraki iki nokta yerine aşağıdaki gibi
deyim sonunda noktalı virgül kullanmak da mümkündür: