La sentencia switch en PHP puede ser tratada como una alternativa a una serie de if… else en la misma expresión. Supongamos que necesita comparar una expresión o una variable con muchos valores diferentes y ejecutar un fragmento de código diferente en función del valor al que equivale. En tal caso, usaría varios si… elseif… else construcciones.

Sin embargo, una construcción de este tipo puede hacer que el código sea bastante desordenado y difícil de seguir. Para simplificar estos códigos, puede usar la construcción switch case en PHP que ofrece una alternativa más compacta para evitar bloques largos de if. elseif.. else códigos.

El siguiente script PHP utiliza instrucciones if elseif:

if ($x == 0) {
   echo "x equals 0";
} elseif ($x == 1) {
   echo "i equals 1";
} elseif ($x == 2) {
   echo "x equals 2";
}

Puede obtener el mismo resultado utilizando las instrucciones switch case como se muestra a continuación:

switch ($x) {
   case 0:
      echo "x equals 0";
   break;
   case 1:
      echo "x equals 1";
   break;
   case 2:
      echo "x equals 2";
   break;
}

La instrucción switch va seguida de una expresión, que se compara sucesivamente con el valor en cada cláusula de caso. Si se encuentra que la expresión coincide con alguno de los casos, se ejecuta el bloque de sentencias correspondiente.

  • La instrucción switch ejecuta las instrucciones dentro de los corchetes línea por línea.
  • Si se encuentra una sentencia case cuya expresión se evalúa como un valor que coincide con el valor de la expresión switch, PHP comienza a ejecutar las sentencias hasta el final del bloque switch, o la primera vez que encuentra una sentencia break.
  • Si no escribe una sentencia break al final de la lista de sentencias de un caso, PHP seguirá ejecutando las sentencias del siguiente caso.

Ejemplo

Intente ejecutar el código anterior eliminando los saltos. Si el valor de x es 0, verás que la salida incluye líneas de «x igual a 1» y «x igual a 2».

<?php
   $x=0;
   switch ($x) {
      case 0:
         echo "x equals 0 \n";
      case 1:
         echo "x equals 1 \n";
      case 2:
         echo "x equals 2";
   }
?>

Producirá el siguiente resultado:

x equals 0
x equals 1
x equals 2

Por lo tanto, es importante asegurarse de terminar cada bloque de casos con una instrucción break.

El caso predeterminado en Switch

Un caso especial es el caso predeterminado. Este caso coincide con todo lo que no coincidió con los otros casos. El uso de default es opcional, pero si se usa, debe ser el último caso dentro de las llaves.

Puede agrupar más de un caso para simular varias expresiones lógicas combinadas con el operador or.

<?php
   $x=10;
   switch ($x) {
      case 0:
      case 1:
      case 2:
         echo "x between 0 and 2 \n";
      break;
      default:
         echo "x is less than 0 or greater than 2";
   }
?>

Los valores con los que se compararán se indican en la cláusula case. El valor puede ser un número, una cadena o incluso una función. Sin embargo, no se pueden utilizar operadores de comparación (<, > == o !=) como valor en la cláusula case.

Puede optar por usar punto y coma en lugar de dos puntos en la cláusula case. Si no se encuentran mayúsculas y minúsculas coincidentes, y tampoco hay una rama predeterminada, no se ejecutará ningún código, como si no se cumpliera la instrucción if.

La instrucción switch-endswitch

PHP permite el uso de sintaxis alternativa delimitando la construcción del switch con sentencias switch-endswitch. La siguiente versión de mayúsculas y minúsculas es aceptable.

<?php
   $x=0;
   switch ($x) :
      case 0:
         echo "x equals 0";
      break;
      case 1:
         echo "x equals 1 \n";
      break;
      case 2:
         echo "x equals 2 \n";
      break;
      default:
         echo "None of the above";
   endswitch
?>

El uso de la instrucción break en switch… Caso

Obviamente, no es necesario escribir un break para terminar el caso predeterminado, ya que es el último caso en la construcción del switch.

Ejemplo

Echa un vistazo al siguiente ejemplo:

<?php
   $d = date("D");

   switch ($d){
      case "Mon":
         echo "Today is Monday";
      break;

      case "Tue":
         echo "Today is Tuesday";
      break;
	  
      case "Wed":
         echo "Today is Wednesday";
      break;

      case "Thu":
         echo "Today is Thursday";
      break;

      case "Fri":
         echo "Today is Friday";
      break;

      case "Sat":
         echo "Today is Saturday";
      break;

      case "Sun":
         echo "Today is Sunday";
      break;

      default:
         echo "Wonder which day is this ?";
   }
?>

Producirá el siguiente resultado:

Today is Monday