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

Любая идея, что я делаю неправильно?


person Clarissa B    schedule 31.05.2011    source источник


Ответы (4)


Вы не можете прервать/продолжить цикл вне функции, изнутри функции. Однако вы можете прервать/продолжить свой цикл на основе возвращаемого значения вашей функции:

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


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

    //Do stuff

    echo $output . '<br>';    
}
person Wytse    schedule 31.05.2011

Оператор continue действителен только внутри циклических структур.

person Salman A    schedule 31.05.2011
comment
Да, это правильно, я бы использовал return;, если вы хотите остановить выполнение функции. - person Etienne Marais; 31.05.2011

continue может пропускать итерации только внутри зацикленной структуры.

Внутри вашей функции контекст ее запуска внутри цикла теряется.

person alex    schedule 31.05.2011

Функция компилируется отдельно и может быть вызвана из любого места. Таким образом, использование continue здесь не имеет смысла, поскольку контекст не находится в контексте цикла. Если вы хотите делегировать работу функции здесь, вы должны спроектировать функцию так, чтобы она возвращала некоторое указание на то, следует ли continue или нет, например, возвращаемое значение TRUE или FALSE.

person John Hargrove    schedule 31.05.2011