La opcionalidad de break en PHP
El comando break es opcional.
Sin embargo, sin él, el comportamiento de los bloques case
será inesperado. Veamos un ejemplo.
Supongamos que tenemos el siguiente código:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
break;
case 2:
echo 2;
break;
case 3:
echo 3;
break;
}
?>
Eliminemos todos los break, y en la variable
$num, para empezar, pongamos el número 3.
Por ahora, todo funcionará como antes:
<?php
$num = 3; // supongamos que aquí está el número 3
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Después de ejecutar, el código mostrará 3 - todo está bien
?>
Ahora pongamos en la variable $num
el número 2. En este caso, se ejecutará
case 2 como se esperaba, y luego, inesperadamente,
también case 3:
<?php
$num = 2;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Después de ejecutar, el código mostrará 2 y luego 3
?>
Y si en la variable $num ponemos
el número 1, entonces se ejecutarán todas
las construcciones case:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Después de ejecutar, el código mostrará 1, luego 2 y luego 3
?>
Es decir, resulta que ante la ausencia de break,
después de ejecutar el case previsto,
también se ejecutarán todos los case
debajo de él. A veces,
esta característica se utiliza al resolver problemas.
En el siguiente ejemplo, si la variable $num
tiene el valor 1 o 2, entonces
en la variable $res se escribirá 'a'.
Si la variable $num tiene el valor
3, entonces en la variable $res
se escribirá 'b':
<?php
$num = 1;
switch ($num) {
case 1:
case 2:
$res = 'a';
break;
case 3:
$res = 'b';
break;
}
echo $res;
?>
Arriba escribí que a veces se utiliza esta característica, pero en general, no recomiendo usarla, ya que el código se vuelve poco evidente.
Es más claro resolver tal problema con if:
<?php
$num = 1;
if ($num == 1 or $num == 2) {
$res = 'a';
}
if ($num == 3) {
$res = 'b';
}
echo $res;
?>