switch
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_