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