Diferencias entre break y continue en PHP PHP
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
- Estructuras de control: break. Manual PHP.
- Estructuras de control: continue. Manual PHP.