A break opcionálissága PHP-ben
A break parancs opcionális.
Ugyanakkor, enélkül a case blokkok
viselkedése váratlan lesz. Nézzük meg egy példán.
Tegyük fel, hogy van egy ilyen kódunk:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
break;
case 2:
echo 2;
break;
case 3:
echo 3;
break;
}
?>
Távolítsuk el belőle az összes break-et, és a változóba
$num kezdetben írjunk be a 3 számot.
Egyelőre minden úgy fog működni, ahogy eddig is:
<?php
$num = 3; // tegyük fel, hogy itt a 3-as szám van
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// A futtatás után a kód kiírja a 3-ast - minden rendben
?>
Most írjuk be a $num változóba a
2 számot. Ebben az esetben várhatóan
lefut a case 2, majd váratlanul
a case 3 is:
<?php
$num = 2;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// A futtatás után a kód kiírja a 2-t, majd a 3-ast
?>
Ha viszont a $num változóba a
1 számot írjuk, akkor az összes
case szerkezet le fog futni:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// A futtatás után a kód kiírja az 1-et, majd a 2-t, majd a 3-ast
?>
Vagyis kiderül, hogy a break hiányában
az eltervezett case végrehajtása után,
az alatta lévő összes case is végrehajtódik. Néha
ezt a sajátosságot felhasználják feladatok megoldásánál.
A következő példában, ha a $num változó
értéke 1 vagy 2, akkor
a $res változóba az 'a' kerül.
Ha viszont a $num változó értéke
3, akkor a $res változóba
az 'b' kerül:
<?php
$num = 1;
switch ($num) {
case 1:
case 2:
$res = 'a';
break;
case 3:
$res = 'b';
break;
}
echo $res;
?>
Fentebb írtam, hogy néha ezt a sajátosságot felhasználják, de én, összességében, nem ajánlom a használatát, mert a kód kevésbé lesz nyilvánvaló.
Nyilvánvalóbb egy ilyen feladatot if-ekkel megoldani:
<?php
$num = 1;
if ($num == 1 or $num == 2) {
$res = 'a';
}
if ($num == 3) {
$res = 'b';
}
echo $res;
?>