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:

  1. break finaliza la ejecución de la estructura control en curso.
  2. 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

  1. Estructuras de control: break. Manual PHP.
  2. Estructuras de control: continue. Manual PHP.

Publicidad