Незадължителност на 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;
?>
По-горе написах, че понякога тази особеност се използва, но като цяло не препоръчвам да се ползва, тъй като кодът става не много очевиден.
По-очевидно е да се реши такава задача чрез if условия:
<?php
$num = 1;
if ($num == 1 or $num == 2) {
$res = 'a';
}
if ($num == 3) {
$res = 'b';
}
echo $res;
?>