switch

(PHP 4, PHP 5, PHP 7)

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.

Sürüm Bilgisi
Sürüm: Açıklama
7.0.0 Çok sayıda default kullanımı E_COMPILE_ERROR hatasına sebep olur..

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:

<?php
switch ($i) {
case 
0:
    echo 
"i eşittir 0";
case 
1:
    echo 
"i eşittir 1";
case 
2:
    echo 
"i eşittir 2";
}
?>

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.

<?php
switch ($i) {
    case 
0:
    case 
1:
    case 
2:
        echo 
"i 3'ten küçüktür ama negatif değildir";
        break;
    case 
3:
        echo 
"i eşittir 3";
}
?>

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:

<?php
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;
default:
    echo 
"i ne 0, ne 1 ne de 2'ye eşittir";
}
?>

İ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.

<?php
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;
default:
    echo 
"i ne 0, ne 1 ne de 2'ye eşittir;
endswitch;
?>

case’ten sonraki iki nokta yerine aşağıdaki gibi deyim sonunda noktalı virgül kullanmak da mümkündür:

<?php
switch($içecek)
{
    case 
'su';
    case 
'süt';
    case 
'ayran';
        echo 
'İyi seçim';
    default;
        echo 
'Lütfen yeniden seçiniz...';
    break;
}
?>