Neobaveznost break u PHP
Naredba break je neobavezna.
Međutim, bez nje, ponašanje blokova case
biće neočekivano. Pogledajmo na primeru.
Neka imamo sledeći kod:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
break;
case 2:
echo 2;
break;
case 3:
echo 3;
break;
}
?>
Uklonimo iz njega sve break, a u promenljivu
$num za početak upišimo broj 3.
Za sada će sve raditi kako je i radilo:
<?php
$num = 3; // neka ovde bude broj 3
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Nakon pokretanja kod će ispisati 3 - sve je u redu
?>
Sada upišimo u promenljivu $num
broj 2. U ovom slučaju će se, po očekivanjima,
izvršiti case 2, a zatim, neočekivano,
i case 3:
<?php
$num = 2;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Nakon pokretanja kod će ispisati 2, a zatim 3
?>
Ako u promenljivu $num upišemo
broj 1, onda će se izvršiti sve
konstrukcije case:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Nakon pokretanja kod će ispisati 1, zatim 2, a zatim 3
?>
Dakle, ispada da će se, u odsustvu break,
nakon izvršenja željenog case,
izvršiti i svi case ispod njega. Ponekad
se ova osobenost koristi u rešavanju zadataka.
U sledećem primeru, ako promenljiva $num
ima vrednost 1 ili 2, onda
će se u promenljivu $res upisati 'a'.
Ako promenljiva $num ima vrednost
3, onda će se u promenljivu $res
upisati 'b':
<?php
$num = 1;
switch ($num) {
case 1:
case 2:
$res = 'a';
break;
case 3:
$res = 'b';
break;
}
echo $res;
?>
Gore sam napisao da se ponekad koristi ova osobenost, ali ja, u principu, ne preporučujem da se njome koristite, jer kod postaje ne baš očigledan.
Očiglednije je rešiti takav zadatak pomoću if-ova:
<?php
$num = 1;
if ($num == 1 or $num == 2) {
$res = 'a';
}
if ($num == 3) {
$res = 'b';
}
echo $res;
?>