Voliteľnosť break v PHP
Príkaz break je voliteľný.
Bez neho však bude správanie blokov case
neočakávané. Pozrime sa na príklad.
Majme takýto kód:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
break;
case 2:
echo 2;
break;
case 3:
echo 3;
break;
}
?>
Odstránime v ňom všetky break a do premennej
$num na začiatok zapíšme číslo 3.
Zatiaľ všetko bude fungovať tak, ako fungovalo:
<?php
$num = 3; // nech je tu číslo 3
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Po spustení kód vypíše 3 - všetko v poriadku
?>
Skúsme teraz do premennej $num zapísať
číslo 2. V tomto prípade sa očakávane
vykoná case 2 a potom nečakane
aj case 3:
<?php
$num = 2;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Po spustení kód vypíše 2 a potom 3
?>
Ak do premennej $num zapíšeme
číslo 1, vykonajú sa všetky
konštrukcie case:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Po spustení kód vypíše 1, potom 2 a potom 3
?>
To znamená, že pri absencii break
sa po vykonaní zamýšľaného case
vykonajú aj všetky case pod ním. Niekedy
sa táto zvláštnosť využíva pri riešení úloh.
V nasledujúcom príklade, ak má premenná $num
hodnotu 1 alebo 2, tak
do premennej $res sa zapíše 'a'.
Ak má premenná $num hodnotu
3, tak do premennej $res
sa zapíše 'b':
<?php
$num = 1;
switch ($num) {
case 1:
case 2:
$res = 'a';
break;
case 3:
$res = 'b';
break;
}
echo $res;
?>
Hore som napísal, že niekedy sa táto zvláštnosť používa, ale vo všeobecnosti ju neodporúčam používať, pretože kód sa stáva nie veľmi zrejmým.
Zrejmejšie je vyriešiť takúto úlohu pomocou ifov:
<?php
$num = 1;
if ($num == 1 or $num == 2) {
$res = 'a';
}
if ($num == 3) {
$res = 'b';
}
echo $res;
?>