2011-05-31 19 views
6

Esto es muy trivial pero no he podido descifrarlo.PHP continue inside function

Esto funciona:

function MyFunction(){ 

//Do stuff 

} 


foreach($x as $y){ 

MyFunction(); 

if($foo === 'bar'){continue;} 

//Do stuff 

echo $output . '<br>'; 

} 

Pero esto no es así:

function MyFunction(){ 

//Do stuff 

if($foo === 'bar'){continue;} 

} 


foreach($x as $y){ 

MyFunction(); 

//Do stuff 

echo $output . '<br>'; 

} 

que los rendimientos a sólo 1 $ de salida y luego:

Fatal error: Cannot break/continue 1 level 

Alguna idea de lo que estoy haciendo ¿incorrecto?

Respuesta

9

No se puede romper/continuar un bucle fuera de una función, desde dentro de una función. Sin embargo, se puede romper/continuar el bucle basado en el valor de retorno de la función:

function myFunction(){ 
    //Do stuff 
    return $foo === 'bar'; 
} 


foreach($x as $y) { 
    if(myFunction()) { 
     continue; 
    } 

    //Do stuff 

    echo $output . '<br>';  
} 
1

continue solo se pueden omitir las iteraciones dentro de una estructura de bucle.

Dentro de su función, se pierde el contexto de su ejecución dentro de un bucle.

7

La instrucción continue es válida solo dentro de las estructuras de bucle.

+1

+1 porque te añadió un enlace;) –

+1

Si esto es correcto, yo usaría 'volver;' si quieres deja de ejecutar una función. –

0

La función se compila por separado y se puede llamar desde cualquier lugar. Por lo tanto, el uso de continue no tiene sentido aquí ya que el contexto no está en el de un bucle. Si desea delegar trabajo a una función aquí, debe diseñar la función para devolver alguna indicación de si se va a continue o no, como TRUE o valor de retorno.