La sentencia switch es similar a una serie de
sentencias IF en la misma expresión. En muchas ocasiones,
se quiere comparar la misma variable (o expresión) con
nuchos valores diferentes, y ejecutar una parte de código
distinta dependiendo de a qué valor es igual. Para ello
sirve la sentencia switch.
Nota:
Tener en cuenta que al contrario que otros lenguajes de
programación, continue se aplica a
switch y funciona de manera similar a break. Si
teneis un switch dentro de un bucle y deseais continuar con el
paso siguiente en el bucle externo, usar continue
2.
Los siguientes dos ejemplos son dos modos distintos de escribir la
misma cosa, uno usa una serie de sentencias if,
y el otro usa la sentencia switch:
Es importante entender cómo se ejecuta la sentencia
switch para evitar errores. La sentencia
switch ejecuta línea por línea
(realmente, sentencia a sentencia). Al comienzo, no se ejecuta
código. Sólo cuando se encuentra una sentencia
case con un valor que coincide con el valor de
la expresión switch PHP comienza a
ejecutar las sentencias. PHP continúa ejecutando las
sentencias hasta el final del bloque switch, o
la primera vez que vea una sentencia break. Si
no se escribe una sentencia break al final de
una lista de sentencias case, PHP seguirá ejecutando las
sentencias del siguiente case. Por ejemplo:
Aquí, si $i es igual a 0, ¡PHP ejecutaría todas las
sentecias print! Si $i es igual a 1, PHP ejecutaría las
últimas dos sentencias print y sólo si $i es igual a
2, se obtendría la conducta 'esperada' y solamente se
mostraría 'i es igual a 2'. Así, es importante no
olvidar las sentencias break (incluso aunque
pueda querer evitar escribirlas intencionadamente en ciertas
circunstancias).
En una sentencia switch, la condición se
evalúa sólo una vez y el resultado se compara a cada
sentencia case. En una sentencia
elseif, la condición se evalúa
otra vez. Si tu condición es más complicada que una
comparación simple y/o está en un bucle estrecho, un
switch puede ser más rápido.
La lista de sentencias de un case puede también estar
vacía, lo cual simplemente pasa el control a la lista de
sentencias del siguiente case.
Un caso especial es el default case". Este
"case" coincide con todo lo que no coincidan los otros case. Por
ejemplo:
La expresión case puede ser cualquier
expresión que se evalúe a un tipo simple, es decir,
números enteros o de punto flotante y cadenas de texto. No
se pueden usar aquí ni arrays ni objetos a menos que se
conviertan a un tipo simple.
La sintaxis alternativa para las estructuras de control está
también soportada con switch. Para más
información, ver Sintaxis
alternativa para estructuras de control.