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