Неабавязковасць break у PHP
Каманда break з'яўляецца неабавязковай.
Без яе, аднак, паводзіны блокаў case
будзе нечаканым. Давайце паглядзім на прыкладзе.
Хай у нас ёсць вось такі код:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
break;
case 2:
echo 2;
break;
case 3:
echo 3;
break;
}
?>
Зробім у ім усе break, а ў зменную
$num для пачатку запішам лік 3.
Пакуль усё будзе працаваць так, як і працавала:
<?php
$num = 3; // хай тут лік 3
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Пасля запуску код выведе 3 - усё добра
?>
Давайце цяпер у зменную $num запішам
лік 2. У гэтым выпадку ў нас чакана
выканаецца case 2, а затым нечакана
яшчэ і case 3:
<?php
$num = 2;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Пасля запуску код выведе 2, а затым 3
?>
Калі ж у зменную $num запісаць
лік 1, то наогул выканаюцца ўсе
канструкцыі case:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Пасля запуску код выведе 1, затым 2, а затым 3
?>
Гэта значыць атрымліваецца, што пры адсутнасці break
пасля выканання задуманага case,
выканаюцца і ўсе case ніжэй яго. Часам
такую асаблівасць выкарыстоўваюць, пры вырашэнні задач.
У наступным прыкладзе, калі зменная $num
мае значэнне 1 або 2, то
ў зменную $res запишацца 'a'.
Калі ж зменная $num мае значэнне
3, то ў зменную $res
запішацца 'b':
<?php
$num = 1;
switch ($num) {
case 1:
case 2:
$res = 'a';
break;
case 3:
$res = 'b';
break;
}
echo $res;
?>
Вышэй я напісаў, што часам такую асаблівасць выкарыстоўваюць, але я, наогул кажучы, не рэкамендую ёй карыстацца, так як код становіцца не вельмі відавочным.
Відавочней вырашыць такую задачу праз іфы:
<?php
$num = 1;
if ($num == 1 or $num == 2) {
$res = 'a';
}
if ($num == 3) {
$res = 'b';
}
echo $res;
?>