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