A opcionalidade do break em PHP
A instrução break é opcional.
No entanto, sem ela, o comportamento dos blocos case
será inesperado. Vamos ver um exemplo.
Suponha que temos o seguinte código:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
break;
case 2:
echo 2;
break;
case 3:
echo 3;
break;
}
?>
Vamos remover todos os break e, para começar,
atribuir o número 3 à variável $num.
Por enquanto, tudo funcionará como antes:
<?php
$num = 3; // vamos supor o número 3 aqui
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Após a execução, o código exibirá 3 - tudo certo
?>
Agora, vamos atribuir o número 2 à variável $num.
Neste caso, o case 2 será executado conforme o esperado,
e então, inesperadamente, o case 3 também será executado:
<?php
$num = 2;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Após a execução, o código exibirá 2 e depois 3
?>
Se atribuirmos o número 1 à variável $num,
então todos os case serão executados:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Após a execução, o código exibirá 1, depois 2 e depois 3
?>
Ou seja, acontece que na ausência de break,
após a execução do case planejado,
todos os case abaixo dele também serão executados. Às vezes
essa característica é utilizada na resolução de problemas.
No exemplo a seguir, se a variável $num
tiver o valor 1 ou 2, então
o valor 'a' será atribuído à variável $res.
Se a variável $num tiver o valor
3, então o valor 'b' será
atribuído à variável $res:
<?php
$num = 1;
switch ($num) {
case 1:
case 2:
$res = 'a';
break;
case 3:
$res = 'b';
break;
}
echo $res;
?>
Como mencionado anteriormente, às vezes essa característica é utilizada, mas eu, de modo geral, não recomendo usá-la, pois o código se torna pouco óbvio.
É mais claro resolver esse tipo de problema usando ifs:
<?php
$num = 1;
if ($num == 1 or $num == 2) {
$res = 'a';
}
if ($num == 3) {
$res = 'b';
}
echo $res;
?>