Volitelnost break v PHP
Příkaz break je volitelný.
Bez něj však bude chování bloků case
nečekané. Podívejme se na příklad.
Předpokládejme, že máme následující kód:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
break;
case 2:
echo 2;
break;
case 3:
echo 3;
break;
}
?>
Odstraníme z něj všechny break a do proměnné
$num pro začátek vložíme číslo 3.
Zatím vše bude fungovat tak, jak fungovalo:
<?php
$num = 3; // předpokládejme, že zde je číslo 3
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Po spuštění kód vypíše 3 - vše je v pořádku
?>
Nyní vložme do proměnné $num
číslo 2. V tomto případě se očekávaně
provede case 2, a poté nečekaně
i case 3:
<?php
$num = 2;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Po spuštění kód vypíše 2 a poté 3
?>
Pokud do proměnné $num vložíme
číslo 1, provedou se všechny
konstrukce case:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Po spuštění kód vypíše 1, poté 2 a poté 3
?>
To znamená, že při absenci break
po provedení zamýšleného case
se provedou i všechny case pod ním. Někdy
se tato zvláštnost využívá při řešení úloh.
V následujícím příkladu, pokud proměnná $num
má hodnotu 1 nebo 2, pak
se do proměnné $res zapíše 'a'.
Pokud proměnná $num má hodnotu
3, pak se do proměnné $res
zapíše 'b':
<?php
$num = 1;
switch ($num) {
case 1:
case 2:
$res = 'a';
break;
case 3:
$res = 'b';
break;
}
echo $res;
?>
Výše jsem napsal, že někdy se tato zvláštnost používá, ale obecně ji nedoporučuji používat, protože kód se stává ne příliš zřejmým.
Je zřejmější vyřešit takový problém pomocí ifů:
<?php
$num = 1;
if ($num == 1 or $num == 2) {
$res = 'a';
}
if ($num == 3) {
$res = 'b';
}
echo $res;
?>