Lecciones de PHP - Lección 8-2 - El operador switch
En la lección anterior conocimos el operador if
. Este nos permite comprobar si una condición es verdadera y, según el resultado, ejecutar las acciones necesarias.
Ahora imaginemos que necesitamos hacer diez comprobaciones y, dependiendo de los resultados, ejecutar una de diez acciones. Por supuesto, podríamos usar if
como en este ejemplo:
<?php if($x == 1){ // acciones } if($x == 2){ // acciones } if($x == 3){ // acciones } if($x == 4){ // acciones } if($x == 5){ // acciones } if($x == 6){ // acciones } if($x == 7){ // acciones } if($x == 8){ // acciones } if($x == 9){ // acciones } if($x == 10){ // acciones } ?>
Este método funcionará, pero para casos así es mejor usar el operador switch
.
PHP switch
El operador switch
permite comprobar el valor de una expresión bajo múltiples condiciones. Vamos a reescribir el ejemplo anterior usando switch
:
<?php switch ($x){ case 1: // acciones break; case 2: // acciones break; case 3: // acciones break; case 4: // acciones break; case 5: // acciones break; case 6: // acciones break; case 7: // acciones break; case 8: // acciones break; case 9: // acciones break; case 10: // acciones break; default: // acciones si ninguna de las anteriores coincidió } ?>
Como mencioné antes, ambos ejemplos funcionan igual, pero en el caso de switch
hemos agregado default
, que se ejecuta si $x
no es igual a ningún valor de 1 a 10.
Veamos cómo funciona la estructura switch
. Primero va la palabra clave switch
, seguida de paréntesis con la expresión a evaluar. Esa expresión puede ser una variable numérica o de texto. Por ejemplo:
<?php switch ($x){ case 'Hello': // acciones break; case 'Bye': // acciones break; } ?>
Luego vienen llaves. Dentro de ellas especificamos los valores posibles con case
y las acciones correspondientes.
<?php switch ($x){ case 'Hello': // valor esperado print $x; // acciones break; // fin de esta rama case 2: $x++; break; } ?>
El valor a comprobar se indica en case
. Si es texto, se encierra entre comillas; si es número, no es necesario. Luego va el signo de dos puntos. Después escribimos las acciones a realizar y finalizamos con break;
, que indica el final de esa rama. Si olvidamos break;
, el switch
continuará ejecutando el siguiente case
.
Al final se puede usar default
, que se ejecuta si ninguno de los case
fue cierto. Dos cosas importantes:
1. No olvides escribir break;
después de cada bloque de acciones.
2. Después de default
no es obligatorio escribir break;
, ya que es el último bloque.
A continuación se muestra el diagrama de flujo de un switch
:
Como ejemplo, supongamos que $D
representa el número de días desde el lunes. El día actual se determina con el resto de la división entre 7:
<?php // $D: número de días desde el lunes $x = $D % 7; switch ($x){ case 1: print 'lunes'; break; case 2: print 'martes'; break; case 3: print 'miércoles'; break; case 4: print 'jueves'; break; case 5: print 'viernes'; break; case 6: print 'sábado'; break; case 7: print 'domingo'; break; } ?>