Neobveznost break v PHP
Ukaz break je neobvezen.
Brez njega pa bo vedenje blokov case
nenavadno. Poglejmo si na primeru.
Recimo, da imamo takšno kodo:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
break;
case 2:
echo 2;
break;
case 3:
echo 3;
break;
}
?>
Odstranimo vse break, v spremenljivko
$num pa za začetek zapišimo številko 3.
Za zdaj bo vse delovalo tako kot prej:
<?php
$num = 3; // naj bo tukaj številka 3
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Po zagonu bo koda izpisala 3 - vse je v redu
?>
Poskusimo zdaj v spremenljivko $num zapisati
številko 2. V tem primeru se bo pričakovano
izvedel case 2, nato pa še nepričakovano
tudi case 3:
<?php
$num = 2;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Po zagonu bo koda izpisala 2 in nato 3
?>
Če pa v spremenljivko $num zapišemo
številko 1, se bodo izvedle vse
konstrukcije case:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Po zagonu bo koda izpisala 1, nato 2 in nato 3
?>
Se pravi, če ni break,
se po izvedbi načrtovanega case,
izvedejo tudi vsi case pod njim. Včasih
to lastnost uporabimo pri reševanju problemov.
V naslednjem primeru, če ima spremenljivka $num
vrednost 1 ali 2, se
v spremenljivko $res zapiše 'a'.
Če pa ima spremenljivka $num vrednost
3, se v spremenljivko $res
zapiše 'b':
<?php
$num = 1;
switch ($num) {
case 1:
case 2:
$res = 'a';
break;
case 3:
$res = 'b';
break;
}
echo $res;
?>
Zgoraj sem napisal, da včasih to lastnost uporabimo, vendar na splošno ne priporočam njeno uporabe, saj koda postane ne zelo očitna.
Bolj očitno je tak problem rešiti z if stavki:
<?php
$num = 1;
if ($num == 1 or $num == 2) {
$res = 'a';
}
if ($num == 3) {
$res = 'b';
}
echo $res;
?>