#3.3 Switch Case Break en PHP

Aprende a utilizar el condicional Switch. Ejemplos de Switch PHP.

Estructuras de control php Condicionales php Programacion web

Veamos paso a paso la última de las estructuras de control condicionales, un condicional diferente para problemas diferentes que logra muchas veces una mayor organización del código y rapidez.

En este tutorial aprenderás los siguientes conceptos clave para aprender a utilizar SWITCH en PHP:

  1. El uso de la estructura de control switch en php.
  2. Para qué sirve y cómo se usa la sentencia Case PHP.
  3. El caso por defecto de un switch.
  4. Uso avanzando de la sentencia switch php.
  5. Cómo usar condiciones en un switch php  o lo que es lo mismo, cómo convertir un switch en una especie de IF .

Estructuras de control condicionales php. El Switch

La sentencia condicional Switch es al igual que los condicionales IF, IF ELSE y IF ELSEIF, es decir, una estructura de control condicional: dependerá de una condición para ejecutar una serie de líneas. Pero en el caso del SWITCH, esta condición se trata de un valor. Así, el switch siempre dependerá de una variable, y de todos los valores que esta puede tomar.

La sentencia básica en PHP Switch es como el siguiente ejemplo:

<?php
switch ( $variable ) {
}
?>

Como puedes ver, la sintaxis, es decir, como escribo la sentencia, es similar a la de un if, pero en este caso no se realiza una comparación, ni se busca lograr que el resultado de la comparación sea true. Solo se tiene en cuenta que valor toma la variable.

Los casos de un switch php

Para tratar los distintos valores posibles que nosotros preveemos que puede tomar la variable del switch, estableceremos una serie de casos o case, estos casos contemplarán un valor concreto (numérico, texto, booleano, etc) y en caso de coincidir con el de la variable, ejecutarán el código que contienen.

Veamos un ejemplo de switch php:

<?php
switch ( $numero ) {
    case 1:
          echo '$numero vale 1';
          break;
    case 2:
          echo '$numero vale 2';
          break;
}
?>

En este ejemplo PHP te he mostrado un switch básico al completo, en el que trato los casos de valor 1 o 2 para la variable $numero. Si el valor de la variable es 1 se ejecutará el código que sigue a los dos puntos (echo '$numero vale 1') hasta la ejecución del break, sentencia que finaliza la lectura de código en el switch. 

Como su nombre indica la sentencia break en PHP rompe ciertas estructuras de control. En PHP, para ser exactos, la sentencia u orden break finaliza la ejecución de las estructuras de control for, foreach, while, do-while o switch en curso, es decir, que contienen al break entre sus líneas de código (normalmente entre llaves). 

Diagrama de flujo de SWITCH y CASE

Si entiendes los diagramas de flujo, no hay nada como ver uno para enteder a la perfección cuál es la lógica de esta sentencia.

En este diagrama se representa la forma de interpretar y ejecutar un SWITCH con sus distintos casos. Como habrás visto, cuando un Case PHP de los cuatro que se muestran se cumple, se ejecuta su código y termina. Pero cómo la comprobación de todos los Case se realiza de forma paralela, solo podría ejecutarse el código de un Case.

Código IF equivalente a SWITCH PHP

El código del condicional switch anterior sería equivalente al siguiente script con IF y ELSE:

<?php
if ( $numero == 1 ) {
    echo '$numero vale 1';
} else if ( $numero == 2 ) {
    echo '$numero vale 1';
}
?>

La sentencia default en switch

Tras ver como se programan los posibles casos de un switch en PHP, vamos a ver una sentencia especial, el default, sentencia que trata el caso por defecto.

Esta sentencia se ejecutará cuando ninguno de los casos programados se cumplen, es decir, cuando el valor de la variable del switch no coincide con los valores de los case. Podríamos decir que sería el else en un switch PHP.

Un ejemplo podría ser:

<?php
switch ( $dia_semana ) {
    case 'sat':
          echo 'el día es sábado';
          break;
    case 'sun':
          echo 'el día es domingo';
          break;
    default:
          echo 'es un día entre semana cualquiera...';
          break;
}
?>

En este ejemplo trato los posibles días de la semana, diferenciando entre los días del fin de semana (sábado y domingo) y, como podría hacer con un else cuando uso if, trato el resto de opciones con el default.

El switch sin break en php

¿Ocurre algún problema si se nos olvida la sentencia break? ¿Dejaría de funcionar el código? No, no dejaría de funcionar, no es un error equivalente al de olvidar una llave o un punto y coma, la omisión de un break cambiaría el funcionamiento común del switch, por lo que en caso de ser un error podría serte dificil de detectar cuando empiezas.

Realmente la sentencia break suele acompañar casi siempre al uso de los case, pero realmente se escribe de forma opcional. La omisión de un break en un case causaría que este, al coincidir con el valor de la variable del switch, se ejecutaría de forma normal, pero a partir de ahí, como el break no ha detenido al ejecución de código, Apache o el intérprete de php continuaría ejecutando las líneas siguientes, como podría ser el de otros case o default, y solo se detendría la ejecución de casos del switch si se encontrará un break.

Veamos un ejemplo que nos describa este caso tan particular:

<?php
switch ( $dia_semana ) {
    case 'sat':
          echo 'el día es sábado';
          break;
    case 'sun':
          echo 'el día es domingo';
          break;
    case 'mon':
    case 'tue':
    case 'wed':
    case 'thu':
    case 'fri':
          echo 'es un día entre semana cualquiera...';
          break;
}
?>

En este ejemplo basado en el del anterior apartado, he sustituido el caso default por los casos para cada día de entre semana. ¿Qué ocurrirá? Pues que el resultado final es exactamente el mismo. Si el día de la semana ($dia_semana) coincide con cualquiera de los los casos de lunes a viernes (mon a fri), como no he indicado un fin de switch mediante el uso de break, se irán ejecutando las líneas que le siguen. Por lo tanto, se escribirá para cualquiera de ellos (los días entre semana) el mensaje 'es un día entre semana cualquiera...' y terminará la ejecución del switch.

La omisión de un break en un case causaría que este, al coincidir con el valor de la variable del switch se ejecutaría de forma normal, pero a partir de ahí, como el break no ha detenido al ejecución de código, Apache o el intérprete de php continuarían ejecutando las líneas siguientes.

Switch avanzado o con condiciones

Existe la posibilidad de programar un switch para que se comporte de forma muy similar a como lo haría una cadena de IF ELSEIF y ELSE utilizando condiciones simples o múltiples.

Esta transformación del switch suele utilizarse cuando muchas condiciones contienen un código simple o cuando el valor de los case puede estar en un rango o varios.

Para lograr este comportamiento debemos, de alguna forma, terminar con la comparación de la variable del switch en PHP, para pasar a comprobar los case y sus condiciones.

Veamos un ejemplo de switch php con condiciones para un rango de valores, exactamente las edades posibles para la vida laboral:

<?php
switch ( true ) {
    case ( $edad < 16 ):
          echo 'No tienes edad de trabajar, sigue formandote';
          break;
    case (  $edad >= 16 && $edad < 65 ):
          echo 'Venga, ¿Qué haces aquí? El trabajo te espera;
          break;
     case ( $edad >= 65 ):
          echo 'Disfruta de la tranquilidad, ¡al menos mientras tus nietos te lo permitan!';
          break;
}
?>

Los puntos a destacar de este ejemplo son dos:

  1. Una valor fijo (true), que sustituye a la típica variable del switch y permite que su ejecución sea normal.
  2. Condiciones que se evalúan a verdadero o falso y que se comprueban una a una, case a case, mediante el uso de paréntesis.

Conocimientos para entender mejor un Switch de PHP

Sobre el autor

Javier Gómez Redactor en Srcodigofuente.es

Javier Gómez

Ingeniero técnico en informática de gestión. Desarrollador web freelance y profesor de desarrollo web a partes iguales. Testarudo autodidacta, creativo, perfeccionista y alma libre.

Cargando comentarios

Utilizamos "cookies" para información estadística. Si continúas navegando aceptas su uso.