Spanish (Español) translation by Ana Paulina Figueroa (you can also view the original English article)
En este artículo, discutiremos los conceptos básicos de la instrucción switch en PHP. Junto con la sintaxis de la instrucción switch, también analizaremos un par de ejemplos reales para demostrar de qué manera puedes usarla.
¿Cuál es el uso de la instrucción switch?
En PHP, la instrucción switch se considera una alternativa a las instrucciones if-elseif-else. La mayoría de las veces quieres comparar diferentes valores con una variable y ejecutar una pieza de código en base a eso. Lo primero que te viene a la mente es implementar una serie de instrucciones if-elseif-else para lograrlo, como se muestra en el siguiente fragmento de código.
1 |
if ($favorite_site == 'Design') { |
2 |
echo "Your favorite site is design.tutsplus.com!"; |
3 |
} elseif ($favorite_site == 'Code') { |
4 |
echo "Your favorite site is code.tutsplus.com!"; |
5 |
} elseif ($favorite_site == 'Business') { |
6 |
echo "Your favorite site is business.tutsplus.com!"; |
7 |
}
|
Si solamente es cuestión de dos o tres condiciones, es adecuado hacer la implementación con las instrucciones if-elseif-else. Pero si necesitas trabajar con varias condiciones, y si haces la implementación con las instrucciones if-elseif-else, el código se vuelve realmente largo y es difícil de gestionar. En esos casos lo ideal es usar la instrucción switch, y eso es exactamente para lo que está diseñada.
Antes de continuar y discutir la instrucción switch a detalle, veamos rápidamente cómo se ve el ejemplo anterior con dicha instrucción.
1 |
switch ($favorite_site) { |
2 |
case 'Design': |
3 |
echo "Your favorite site is design.tutsplus.com!"; |
4 |
break; |
5 |
case 'Code': |
6 |
echo "Your favorite site is code.tutsplus.com!"; |
7 |
break; |
8 |
case 'Business': |
9 |
echo "Your favorite site is business.tutsplus.com!"; |
10 |
break; |
11 |
}
|
¿No se ve mucho más compacto y ordenado? Por lo tanto, la instrucción switch es realmente útil cuando se trata de trabajar con múltiples condiciones en tu código.
Sintaxis y ejemplos
En esta sección, analizaremos la sintaxis de la instrucción switch y un par de ejemplos reales para demostrar cómo puedes usarla en tu desarrollo cotidiano con PHP.
Sintaxis
Analicemos la sintaxis de la instrucción switch.
1 |
switch (expression) |
2 |
{
|
3 |
case value1: |
4 |
// code to be executed if expression equals to value1
|
5 |
break; |
6 |
case value2: |
7 |
// code to be executed if expression equals to value2
|
8 |
break; |
9 |
case value3: |
10 |
// code to be executed if expression equals to value3
|
11 |
break; |
12 |
...
|
13 |
...
|
14 |
default: |
15 |
// code to be executed if no cases are matched
|
16 |
}
|
El proceso comienza con la expresión en la instrucción switch. En primer lugar se evalúa la expresión, y la salida de esta última se compara con todos los casos en secuencia hasta que haya una coincidencia. Si hay una coincidencia, se ejecuta el código asociado con ese caso en particular. Si no hay coincidencia, y si hay un caso default
disponible, la instrucción ejecutará ese código.
Es importante que no olvides la instrucción break
en cada caso. Si un caso coincide, y este no tiene una instrucción break, el código de todos los siguientes casos será ejecutado aún cuando no coincidan los valores de cada caso.
Revisemos el siguiente ejemplo para comprender la importancia de la instrucción break.
1 |
<?php
|
2 |
$favorite_site = 'Code'; |
3 |
switch ($favorite_site) { |
4 |
case 'Design': |
5 |
echo "Your favorite site is design.tutsplus.com!"; |
6 |
break; |
7 |
case 'Code': |
8 |
echo "Your favorite site is code.tutsplus.com!"; |
9 |
case 'Business': |
10 |
echo "Your favorite site is business.tutsplus.com!"; |
11 |
break; |
12 |
}
|
13 |
?>
|
Si piensas que solamente mostraría Your favorite site is code.tutsplus.com!
(¡Tu sitio favorito es code.tutsplus.com!), ¡estás equivocado! Lo que mostraría sería lo siguiente:
1 |
Your favorite site is code.tutsplus.com! |
2 |
Your favorite site is business.tutsplus.com! |
Esto se debe a que no has incluido la instrucción break
en el segundo caso y, por lo tanto, PHP ejecutaría el código de todos los siguientes casos, independientemente del valor de la variable $favorite_site
. Así que nunca debes olvidar la instrucción break
al usar la instrucción switch en tu código.
Finalmente, el caso default
es opcional; no es obligatorio proporcionarlo. Su propósito es brindar el código predeterminado que se ejecuta si el valor de la expresión no coincide con ningún caso.
Así que esa es la sintaxis de la instrucción switch. En la siguiente sección veremos un par de ejemplos reales.
Ejemplos
Ahora estás familiarizado con la sintaxis de la instrucción switch y, en la sección anterior, ya has analizado un par de ejemplos básicos. En esta sección analizaremos un par de ejemplos avanzados de la instrucción switch.
Múltiples casos para el mismo bloque de código
Revisemos el siguiente ejemplo.
1 |
<?php
|
2 |
switch ($favorite_site) |
3 |
{
|
4 |
case 'Design': |
5 |
case 'Code': |
6 |
case 'Business': |
7 |
echo "It's great to see that you love one of our tutsplus group of websites!"; |
8 |
break; |
9 |
default: |
10 |
echo "You would like to explore tutsplus.com, we're sure you would love it!"; |
11 |
}
|
12 |
?>
|
En algunas ocasiones quieres ejecutar la misma pieza de código para diferentes casos. El ejemplo anterior lo demuestra. En él, si el valor de la variable $favorite_site
es 'Design'
o 'Code'
o 'Business'
, la instrucción ejecutaría el mismo código para todos estos tres casos. De lo contrario, ejecutaría el código asociado con el caso predeterminado.
Expresión en las instrucciones switch
En los ejemplos que hemos discutido hasta ahora, hemos usado una variable en la instrucción switch. De hecho, la instrucción switch te permite usar una expresión también.
Veamos cómo puedes usar una expresión en la instrucción switch, como se muestra en el siguiente ejemplo.
1 |
<?php
|
2 |
switch (date("N", time())) |
3 |
{
|
4 |
case 0: |
5 |
echo 'Sunday'; |
6 |
break; |
7 |
case 1: |
8 |
echo 'Monday'; |
9 |
break; |
10 |
case 2: |
11 |
echo 'Tuesday'; |
12 |
break; |
13 |
case 3: |
14 |
echo 'Wednesday'; |
15 |
break; |
16 |
case 4: |
17 |
echo 'Thursday'; |
18 |
break; |
19 |
case 5: |
20 |
echo 'Friday'; |
21 |
break; |
22 |
case 6: |
23 |
echo 'Saturday'; |
24 |
break; |
25 |
}
|
26 |
?>
|
Primero, PHP evalúa la expresión en la instrucción switch, y la salida de esa expresión se compara con todos los casos. En este ejemplo, la instrucción muestra el día actual de la semana.
Instrucciones switch anidadas
Finalmente, también puedes anidar las instrucciones switch. Veamos de qué manera funciona esto con el siguiente ejemplo.
1 |
<?php
|
2 |
switch( $type ) |
3 |
{
|
4 |
case "Courses": |
5 |
switch( $category ) |
6 |
{
|
7 |
case "Code": |
8 |
echo "Visit https://code.tutsplus.com/courses!"; |
9 |
break; |
10 |
case "Web Design": |
11 |
echo "Visit https://webdesign.tutsplus.com/courses!"; |
12 |
break; |
13 |
}
|
14 |
break; |
15 |
case "Tutorials": |
16 |
switch( $category ) |
17 |
{
|
18 |
case "Code": |
19 |
echo "Visit https://code.tutsplus.com/tutorials!"; |
20 |
break; |
21 |
case "Business": |
22 |
echo "Visit https://business.tutsplus.com/tutorials!"; |
23 |
break; |
24 |
}
|
25 |
break; |
26 |
case "Guides": |
27 |
switch( $category ) |
28 |
{
|
29 |
case "Code": |
30 |
echo "Visit https://code.tutsplus.com/series!"; |
31 |
break; |
32 |
case "Business": |
33 |
echo "Visit https://business.tutsplus.com/series!"; |
34 |
break; |
35 |
}
|
36 |
break; |
37 |
}
|
38 |
?>
|
Como puedes ver, es perfectamente válido usar una instrucción switch dentro de otra instrucción switch. Sin embargo, lo conveniente es que intentes evitar esto, ya que ocasiona que tu código sea más difícil de leer y gestionar.
Conclusión
Hoy discutimos cómo puedes usar la instrucción switch en PHP. Es una característica realmente útil del lenguaje, que te permite simplificar instrucciones if-elseif-else extensas y mantiene la claridad y la legibilidad de tu código.