Необязательность 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;
?>