PHP'de break'in İsteğe Bağlı Olması
break komutu isteğe bağlıdır.
Ancak, onsuz case bloklarının davranışı
beklenmedik olacaktır. Bir örnekle inceleyelim.
Şu şekilde bir kodumuz olduğunu varsayalım:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
break;
case 2:
echo 2;
break;
case 3:
echo 3;
break;
}
?>
İçindeki tüm break ifadelerini kaldıralım,
ve $num değişkenine başlangıç olarak 3 sayısını atayalım.
Başlangıçta her şey eskisi gibi çalışacaktır:
<?php
$num = 3; // buraya 3 sayısını yazalım
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Çalıştırdıktan sonra kod 3 yazdıracak - her şey yolunda
?>
Şimdi $num değişkenine 2 sayısını atayalım.
Bu durumda, beklenildiği gibi case 2 çalışacak,
ardından beklenmedik bir şekilde case 3 de çalışacaktır:
<?php
$num = 2;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Çalıştırdıktan sonra kod önce 2, sonra 3 yazdıracak
?>
Eğer $num değişkenine 1 sayısı atanırsa,
tüm case yapıları çalışacaktır:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Çalıştırdıktan sonra kod önce 1, sonra 2, ardından 3 yazdıracak
?>
Yani, break olmadığında, planlanan case
çalıştıktan sonra, onun altındaki tüm case ifadeleri de
çalışır. Bazen bu özellik problem çözmede kullanılır.
Aşağıdaki örnekte, eğer $num değişkeninin değeri
1 veya 2 ise, $res değişkenine
'a' yazılır. Eğer $num değişkeninin değeri
3 ise, $res değişkenine 'b' yazılır:
<?php
$num = 1;
switch ($num) {
case 1:
case 2:
$res = 'a';
break;
case 3:
$res = 'b';
break;
}
echo $res;
?>
Yukarıda, bazen bu özelliğin kullanıldığını yazdım, ancak genel olarak, kodu çok açık olmadığı için kullanılmasını tavsiye etmiyorum.
Böyle bir problemi if yapıları ile çözmek daha anlaşılırdır:
<?php
$num = 1;
if ($num == 1 or $num == 2) {
$res = 'a';
}
if ($num == 3) {
$res = 'b';
}
echo $res;
?>