PHP продолжить внутри функции

#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 возвращаемое значение.