9

这可能非常微不足道,但我无法弄清楚。

这有效:

function MyFunction(){

//Do stuff

}


foreach($x as $y){

MyFunction();

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

//Do stuff

echo $output . '<br>';

}

但这不会:

function MyFunction(){

//Do stuff

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

}


foreach($x as $y){

MyFunction();

//Do stuff

echo $output . '<br>';

}

这仅产生 1 $output 然后:

Fatal error: Cannot break/continue 1 level

知道我做错了什么吗?

4

4 回答 4

13

您不能从函数内部中断/继续函数外部的循环。但是,您可以根据函数的返回值中断/继续循环:

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


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

    //Do stuff

    echo $output . '<br>';    
}
于 2011-05-31T06:46:08.867 回答
7

continue语句仅在循环结构内有效。

于 2011-05-31T06:23:35.127 回答
1

continue只能跳过循环结构内的迭代。

在你的函数内部,它在循环中运行的上下文丢失了。

于 2011-05-31T06:23:25.487 回答
0

该函数是单独编译的,可以从任何地方调用。因此,continue这里的使用没有意义,因为上下文不在循环中。如果您希望在此处将工作委托给某个函数,则应设计该函数以返回一些指示是否执行的指示continue,例如 aTRUEFALSE返回值。

于 2011-05-31T06:24:43.380 回答