gratiszona

switch

La sentencia switch es similar a una serie de sentencias IF en la misma expresion. En muchas ocasiones, se quiere
comparar la misma variable (o expresion) con nuchos valores diferentes, y ejecutar una parte de codigo distinta
dependiendo de a que 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:
if ($i == 0) {
print "i es igual a 0";
}
if ($i == 1) {
print "i es igual a 1";
}
if ($i == 2) {
print "i es igual a 2";
}
switch ($i) {
case 0:
print "i es igual a 0";
break;
case 1:
print "i es igual a 1";
break;
case 2:
print "i es igual a 2";
break;
}

Es importante entender como se ejecuta la sentencia switch para evitar errores. La sentencia switch ejecuta linea por
linea (realmente, sentencia a sentencia). Al comienzo, no se ejecuta codigo. Solo cuando se encuentra una sentencia case
con un valor que coincide con el valor de la expresion switch PHP empieza a ejecutar las sentencias. PHP continua
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 seguira ejecutando las sentencias del siguiente case. Por
ejemplo:
switch ($i) {
case 0:
print "i es igual a 0";
case 1:
print "i es igual a 1";
case 2:
print "i es igual a 2";
}

Aqui, si $i es igual a 0, ¡PHP ejecutaria todas las sentecias print! Si $i es igual a 1, PHP ejecutaria las ultimas dos
sentencias print y solo si $i es igual a 2, se obtendria la conducta ’esperada’ y solamente se mostraria ’i es igual a 2’. Asi
es importante no olvidar las sentencias break (incluso aunque pueda querer evitar escribirlas intencionadamente en ciertas
circunstancias).
En una sentencia switch, la condicion se evalua solo una vez y el resultado se compara a cada sentencia case. En una
sentencia elseif, la condicion se evalua otra vez. Si tu condicion es mas complicada que una comparacion simple y/o esta
en un bucle estrecho, un switch puede ser mas rapido.
La lista de sentencias de un case puede tambien estar vacia, lo cual simplemente pasa el control a la lista de sentencias del
siguiente case.
switch ($i) {
case 0:
case 1:
case 2:
print "i es menor que 3, pero no negativo";
break;
case 3:
print "i es 3";
}

Un case especial es el default case. Este case coincide con todo lo que no coincidan los otros case. Por ejemplo:
switch ($i) {
case 0:
print "i es igual a 0";
break;
case 1:
print "i es igual a 1";
break;
case 2:
print "i es igual a 2";
break;
default:
print "i no es igual a 0, 1 o 2";
}

La expresion case puede ser cualquier expresion que se evalue a un tipo simple, es decir, numeros enteros o de punto
flotante y cadenas de texto. No se pueden usar aqui ni arrays ni objetos a menos que se conviertan a un tipo simple.
La sintaxis alternativa para las estructuras de control esta tambien soportada con switch. Para mas informacion, ver
Sintaxis alternativa para estructuras de control.
switch ($i):
case 0:
print "i es igual 0";
break;
case 1:
print "i es igual a 1";
break;
case 2:
print "i es igual a 2";
break;
default:
print "i no es igual a 0, 1 o 2";
endswitch;

Anterior: break y continue en php
Siguiente: require en php