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.
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 case 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.