break y continue son dos de las sentencias más utilizadas en PHP para manipular el flujo de las iteraciones en las estructuras de control cíclicas (for, foreach, while, do-while o switch). Ambas cortan el ciclo actual pero con una importante diferencia:

  • break finaliza la ejecución de la estructura control en curso.
  • continue finaliza la iteración actual de la estructura control y se inicia una nueva iteración.
Esto implica, básicamente que:
while ( $foo ) {   <--------------------┐
    continue;      --- vuelve aquí -----┘
    break;         ----- salta aquí ----┐
}
                  <---------------------┘
En otras palabras, continue le dice a PHP que la iteración actual se ha acabado y debe empezar en la evaluación de la condición que abre la estructura de control. Por su parte, break le dice a PHP que la evaluación de la estructura control actual ha terminado y que no siga haciendo iteraciones.

Si hacemos un simple test como este:
$letters = [ 'A', 'B', 'C' ];
foreach ( $letters as $letter) {
    if( 'A' == $letter ) {
        continue;
        echo 'Esto nunca se imprimirá';
    }
    echo $letter;
}
Se imprimirá la cadena BC ya que cuándo $letter es igual a A la iteración no alcanza la sentencia echo $letter; sino que vuelve al principio del foreach.

Por el contrario, si hacemos:
$letters = [ 'A', 'B', 'C' ];
foreach ( $letters as $letter) {
    if( 'A' == $letter ) {
        break;
        echo 'Esto nunca se imprimirá';
    }
    echo $letter;
}
No se imprimirá nada ya que en la primera iteración, cuándo $letter es igual a A, se finaliza la ejecución de la estructura foreach y ninguno de los echo es alcanzado.

Cuándo break o continue se utilizan en una estructura de control anidada en otra se puede especificar el número de estructuras a las que afectan. El número por omisión es 1 y afecta sólo a la estructura actual. Estas dos estructuras serían iguales:
while ( $foo ) {
    $items = [ 1, 2, 3 ];
    foreach( $items as $item ) {  <--------------------┐
        continue;                 --- vuelve aquí -----┘
    }
}

// Esta estructura es igual a la anterior
while ( $foo ) {
    $items = [ 1, 2, 3 ];
    foreach( $items as $item ) {  <--------------------┐
        continue 1;               --- vuelve aquí -----┘
    }
}
Pero podemos hacer que vuelva a la estructura while externa con continue 2:
while ( $foo ) {                 <--------------------┐
    $items = [ 1, 2, 3 ];
    foreach( $items as $item ) {
        continue 2;               --- vuelve aquí ----┘
    }
}
O con break:
while ( $foo ) {
    $items = [ 1, 2, 3 ];
    foreach( $items as $item ) {
        break 2;               --- salta aquí -----┐
    }
}
                             <--------------------┘

Referencias 64291g


Estructuras de control: break. Manual PHP.
Estructuras de control: continue. Manual PHP.
Compartir

Mi nombre es Alexander fundador y CEO, y me gusta llamarme un Geek. Amo la informática, tecnología y todo lo que está relacionado con ella. Inicié este sitio con la intención de compartir conocimientos como cursos en línea, tutoriales y videotutoriales. Estoy muy entusiasmado con la información que he descubierto y compartido hasta el momento. La verdad es que lo he hecho con el mayor de los gustos. Así es, soy un Geek con una visión para compartir conocimiento. Leer mas... 6c435j