switch
(PHP 4, PHP 5, PHP 7, PHP 8)
La sentencia switch
es similar a una serie de
sentencias IF en la misma expresión. En muchas ocasiones, es posible que
se quiera comparar la misma variable (o expresión) con muchos
valores diferentes, y ejecutar una parte de código distinta dependiendo
de a que valor es igual. Para esto es exactamente la
expresión switch
.
Nota:
Cabe señalar que a diferencia de algunos otros lenguajes, la sentencia
continue se aplica
a switch
y actúa de manera similar a break
. Si se
tiene un switch
dentro de un bucle y se desea continuar a la siguiente iteración de
del ciclo exterior, se utiliza continue 2
.
Nota:
Tener en cuenta que switch/case hace
comparaciones flexibles.
Historial de cambios
Versión |
Descripción |
7.0.0 |
Múltiples casos predeterminados (default) emitirán un error de tipo E_COMPILE_ERROR .
|
Los dos ejemplos siguientes son dos formas diferentes de escribir lo
mismo, uno con una serie de sentencias if
y
elseif
, y el otro usando la
sentencia switch
:
Ejemplo #1 Estructura switch
<?php
if ($i == 0) {
echo "i es igual a 0";
} elseif ($i == 1) {
echo "i es igual a 1";
} elseif ($i == 2) {
echo "i es igual a 2";
}
switch ($i) {
case 0:
echo "i es igual a 0";
break;
case 1:
echo "i es igual a 1";
break;
case 2:
echo "i es igual a 2";
break;
}
?>
Ejemplo #2 Estrutura switch
permite el uso de strings
<?php
switch ($i) {
case "manzana":
echo "i es una manzana";
break;
case "barra":
echo "i es una barra";
break;
case "pastel":
echo "i es un pastel";
break;
}
?>
Es importante entender cómo la sentencia switch
es ejecutada con el fin de evitar errores. La
sentencia switch
ejecuta línea por línea
(en realidad, sentencia por sentencia). Al principio, ningún código es
ejecutado. Solo cuando se encuentra una sentencia case
cuya expresión se evalúa a un valor que coincida con el valor de la
con un valor que coincide con el valor de la
expresión switch
, PHP comienza a ejecutar la
sentencias. PHP continúa ejecutando las sentencias hasta el final
del bloque switch
, o hasta la primera vez que vea
una sentencia break
. Si no se escribe una
sentencia break
al final de la lista de sentencias
de un caso, PHP seguirá ejecutando las sentencias del
caso siguiente. Por ejemplo:
Aquí, si $i es igual a 0, PHP ejecutaría todas las sentencias
echo! Si $i es igual a 1, PHP ejecutaría las últimas dos
sentencias echo. Se obtendría el comportamiento esperado (se mostraría
'i es igual a 2') sólo si $i es igual a 2. Por lo tanto,
es importante no olvidar las sentencias break
(aunque es posible que se desee evitar proporcionarlas a propósito bajo
determinadas circunstancias).
En una sentencia switch
, la condición es
evaluada sólo una vez y el resultado es comparado con cada una de las
sentencias case
. En una sentencia elseif
,
la condición es evaluada otra vez. Si la condición es
más complicada que una simple comparación y/o está en un bucle estrecho,
un switch
puede ser más rápido.
La lista de sentencias para un caso también puede estar vacía, lo cual simplemente
pasa el control a la lista de sentencias para el siguiente caso.
Un caso especial es el default
. Este caso coincide
con cualquier cosa que no se haya correspondido por los otros casos. Por ejemplo:
La sintaxis alternativa para las estructuras de control es compatible con los
switch. Para obtener más información, consulte Sintaxis alternativa
de estructuras de control.
Es posible utilizar un punto y coma en lugar de dos puntos después de un caso como: