Опционалност на break во PHP
Командата break е опционална.
Без неа, сепак, однесувањето на блоковите case
ќе биде неочекувано. Ајде да погледнеме на пример.
Нека имаме ваков код:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
break;
case 2:
echo 2;
break;
case 3:
echo 3;
break;
}
?>
Да ги отстраниме сите break, а во променливата
$num за почеток да запишеме број 3.
Засега сè ќе работи како што работеше:
<?php
$num = 3; // нека овде биде бројот 3
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// По стартувањето кодот ќе испише 3 - сè е во ред
?>
Ајде сега во променливата $num да запишеме
број 2. Во овој случај, очекувано
ќе се изврши case 2, а потоа неочекувано
и case 3:
<?php
$num = 2;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// По стартувањето кодот ќе испише 2, а потоа 3
?>
Ако во променливата $num се запише
број 1, тогаш воопшто ќе се извршат сите
конструкции case:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// По стартувањето кодот ќе испише 1, потоа 2, а потоа 3
?>
Односно, излегува дека при отсуство на break
по извршувањето на посакуваниот case,
ќе се извршат и сите case под него. Понекогаш
оваа особеност се користи при решавање на проблеми.
Во следниот пример, ако променливата $num
ја има вредноста 1 или 2, тогаш
во променливата $res ќе се запише 'a'.
Ако пак променливата $num ја има вредноста
3, тогаш во променливата $res
ќе се запише 'b':
<?php
$num = 1;
switch ($num) {
case 1:
case 2:
$res = 'a';
break;
case 3:
$res = 'b';
break;
}
echo $res;
?>
Погоре напишав дека понекогаш таквата особеност се користи, но јас, воопшто, не препорачувам да се користи, бидејќи кодот станува не многу очигледен.
Поочигледно е ваквиот проблем да се реши со if изрази:
<?php
$num = 1;
if ($num == 1 or $num == 2) {
$res = 'a';
}
if ($num == 3) {
$res = 'b';
}
echo $res;
?>