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:
<?php |
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:
<?php |
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.
<?php |
Un caso especial es el default case". Este "case" coincide con todo lo que no coincidan los otros case. Por ejemplo:
<?php |
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.