Sentencia switch de PHP con case y bloque default
La sentencia switch de PHP compara una expresión contra una lista de valores case y ejecuta la primera rama que coincide. Úsala cuando una variable puede tomar una de varias opciones fijas y cada opción activa una lógica distinta. Agrupar varias etiquetas case (cada una, una sentencia case de PHP) en una sola rama evita condiciones repetidas en cadenas largas de if/elseif.
Ejemplo de sentencia switch en PHP para comparar valores
Salida:
La salida aparecerá aquí...
Salida:
Escribir recurso
Cómo funciona este ejemplo
switch ($metodo)evalúa$metodouna sola vez y compara el resultado con cada valorcaseusando comparación laxa (==).case "GET"no coincide con"POST", así que la ejecución pasa al siguiente caso.case "POST"coincide. Como no haybreakdespués de esta etiqueta, la ejecución cae en el bloque decase "PUT": así se agrupan ambos métodos en la misma rama.breaksale del switch después de imprimir. Sinbreak, la ejecución continuaría haciadefault.defaultactúa como captura general cuando no coincide ningúncase. Es opcional, pero recomendable para código defensivo.
¿PHP switch usa comparación estricta o laxa?
PHP switch usa comparación laxa (==), así que los valores pueden convertirse durante la coincidencia. Un error común es que "0" coincida con case 0, y que false también coincida con case 0. El orden de los casos importa: gana la primera coincidencia laxa. Cuando importa la comparación estricta, usa match (PHP 8+) o if/elseif explícitos con ===.
Errores comunes con switch en PHP
Omitir break (caída accidental a casos siguientes):
Incorrecto:
$rol = "administrador";
switch ($rol) {
case "administrador":
$etiqueta = "administrador";
case "editor":
$etiqueta = "editor";
break;
}
Correcto:
$rol = "administrador";
switch ($rol) {
case "administrador":
$etiqueta = "administrador";
break;
case "editor":
$etiqueta = "editor";
break;
}
Sin break, un caso que ya coincidió sigue ejecutando las ramas siguientes. La caída intencional debe agrupar etiquetas sin código entre ellas.
Usar continue dentro de un bucle esperando pasar a la siguiente iteración:
Incorrecto:
$elementos = ["mantener", "omitir", "mantener"];
foreach ($elementos as $elemento) {
switch ($elemento) {
case "omitir":
continue; // sale del switch, no del bucle
}
echo $elemento . "\\n";
}
Correcto:
$elementos = ["mantener", "omitir", "mantener"];
foreach ($elementos as $elemento) {
switch ($elemento) {
case "omitir":
continue 2; // avanza el foreach
}
echo $elemento . "\\n";
}
Dentro de un switch anidado en un bucle, continue se comporta como break para el switch. Usa continue 2 para apuntar al bucle externo.
switch en PHP vs expresión match
| switch | match (PHP 8+) |
|---|---|
| Sentencia: no devuelve un valor | Expresión: devuelve un valor |
Comparación laxa (==) | Comparación estricta (===) |
| Tiene fall-through por defecto | No hay fall-through; cada rama devuelve |
| Soporta bloques de varias líneas por caso | Una expresión por rama |
Usa switch cuando las ramas contienen varias sentencias o cuando la caída intencional agrupa casos. Usa match cuando quieras mapear un valor a un resultado con seguridad estricta de tipos.
FAQ
¿Por qué se necesita break en una sentencia switch de PHP?
switch en PHP usa fall-through por defecto: cuando un caso coincide, todas las ramas siguientes se ejecutan hasta encontrar un break o llegar al final del bloque switch. La sentencia break sale del switch de inmediato. Omitirla solo es seguro cuando agrupas casos que comparten la misma lógica de forma intencional.
¿Cuándo conviene usar match en lugar de switch en PHP 8+?
Prefiere match cuando necesitas comparación estricta, quieres asignar el resultado a una variable o tienes una sola expresión por rama. Usa switch cuando las ramas incluyen varias sentencias, efectos secundarios o caída deliberada entre casos.