Это, вероятно, очень тривиально, но я не смог понять это.
Это работает:
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 $ выход, а затем:
Fatal error: Cannot break/continue 1 level
Любая идея, что я делаю неправильно?
Вы не можете разбить / продолжить цикл вне функции, изнутри функции. Однако вы можете разбить / продолжить цикл на основе возвращаемого значения вашей функции:
function myFunction(){ //Do stuff return $foo === 'bar'; } foreach($x as $y) { if(myFunction()) { continue; } //Do stuff echo $output . '<br>'; }
Оператор continue
действителен только внутри циклов.
continue
может пропускать итерации внутри структуры цикла.
Внутри вашей функции теряется контекст ее работы внутри цикла.
Функция скомпилирована отдельно и может быть вызвана из любого места. Таким образом, использование continue
не имеет смысла здесь, поскольку контекст не совпадает с контекстом цикла. Если вы хотите делегировать работу функции здесь, вы должны создать функцию для возврата некоторого указания на continue
или нет, например, возвращаемое значение TRUE
или FALSE
.