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 .

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 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 :

 
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"

 
;

 
 }





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 .

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

 
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

 
;