switch
(PHP 4, PHP 5, PHP 7, PHP 8)
La instrucción switch
equivale a una serie de instrucciones
if
. En numerosas ocasiones, se necesitará comparar la misma variable (o expresión) con un gran número de valores
diferentes, y ejecutar diferentes partes de código según el valor
al que sea igual. Esto es exactamente para lo que sirve la instrucción
switch
.
Nota:
Téngase en cuenta que, a diferencia de otros lenguajes, la estructura
continue se aplica
a las estructuras switch
y se comporta de la misma manera
que break
.
Si se tiene un switch
dentro de un bucle, y se desea continuar hasta la siguiente iteración del bucle externo,
se debe utilizar continue 2
.
Nota:
Téngase en cuenta que switch/case provoca una
comparación amplia.
En el siguiente ejemplo, cada bloque de código es equivalente.
Uno utiliza una serie de instrucciones if
y
elseif
, y el otro una instrucción de tipo
switch
. En cada caso, la salida es la misma.
Ejemplo #1 Instrucción switch
<?php
// Este switch:
switch ($i) {
case 0:
echo "i igual 0";
break;
case 1:
echo "i igual 1";
break;
case 2:
echo "i igual 2";
break;
}
// Equivale a:
if ($i == 0) {
echo "i igual 0";
} elseif ($i == 1) {
echo "i igual 1";
} elseif ($i == 2) {
echo "i igual 2";
}
?>
Es importante entender que la instrucción
switch
ejecuta cada una de las
cláusulas en orden. La instrucción switch
se ejecuta línea por línea. Al principio,
no se ejecuta ningún código. Solo cuando se encuentra una instrucción
case
cuya
expresión se evalúa a un valor que coincide con el valor de la
expresión switch
, PHP ejecuta entonces las instrucciones correspondientes.
PHP continúa ejecutando las instrucciones hasta
el final del bloque de instrucciones del switch
,
o bien hasta que encuentra la instrucción break
.
Si no se puede utilizar la instrucción
break
al final de la instrucción
case
, PHP continuará ejecutando
todas las instrucciones que siguen. Por ejemplo :
En este ejemplo, si $i es igual a 0, PHP ejecutará
todas las instrucciones que
siguen ! Si $i es igual a 1, PHP ejecutará
las dos últimas instrucciones. Y solo si $i es
igual a 2, se obtendrá el resultado
esperado, es decir, la visualización de
"i igual 2". Por lo tanto, es importante no olvidar
la instrucción break
(aunque es posible que se omita en ciertas circunstancias).
En un comando switch
, una condición se evalúa solo una vez, y el resultado se
compara con cada case
.
En una estructura elseif
, las condiciones se evalúan en cada comparación. Si la
condición es más complicada que una simple
comparación, o bien forma parte de un bucle,
switch
será más rápido.
La lista de comandos de un case
puede
estar vacía, en cuyo caso PHP utilizará la lista de
comandos del caso siguiente.
Un caso especial es default
. Este caso se utiliza cuando todos
los otros casos han fallado. Por ejemplo :
Nota:
Varios casos default generarán un error de nivel
E_COMPILE_ERROR
.
Nota:
Técnicamente, el caso default
puede ser colocado
en cualquier posición. Solo se utilizará si ningún otro caso coincide.
Sin embargo, por convención, es preferible colocarlo al final.
Si ningún case
coincide, y no hay un default
, entonces no se ejecutará ningún código, al igual que si ninguna instrucción if
fuera verdadera.
Un valor de case
puede ser dado en forma de expresión. Sin embargo, esta expresión será
evaluada sola, y luego comparada de manera aproximada con el valor del switch
. Esto significa
que no puede ser utilizada para evaluaciones complejas del valor del switch
. Por ejemplo :
Para comparaciones más complejas, el valor true
puede ser utilizado como valor de switch
.
O, alternativamente, bloques if
-else
en lugar de switch
.
La sintaxis alternativa para esta estructura de control es
la siguiente : (para más información, ver
sintaxis
alternativas).
Es posible utilizar un punto y coma en lugar de dos puntos después
de un case, como sigue :