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>';

}

これにより、$ outputが1つだけ生成され、次のようになります。

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など、実行するかどうかの指示を返すように関数を設計する必要があります。TRUEFALSE

于 2011-05-31T06:24:43.380 に答える