Как только исключение выдается и перехватывается, пути назад к блоку кода, в котором было сгенерировано исключение, больше нет. Настолько неудачно, что нет технической возможности, что у вас есть только один блок try catch, в котором вы перехватываете все исключения и затем решаете, являются ли они важными (и прекращают ли выполнение сценария), или исключение не было реальной проблемой, и вы хотите, чтобы ваш сценарий вел себя какесли не было никаких исключений.
Единственное решение, которое я могу вам дать:
foreach($xx as $x) {
try {
//main code
try {
//first code that can cause an exception
//you just want to continue after
} catch (Exception $e) {
echo "Nothing wrong, just an exception " . $e->getMessage(), "\n";
}
try {
//second code that can cause an exception
//a serious problem, you don't want to continue
} catch (Exception $e) {
echo "This is a real problem " . $e->getMessage(), "\n";
throw $e; //re-trowing exception
}
//third code that can cause an exception
} catch (Exception $e) {
//will catch exception from code 2 and 3 but not 1.
echo 'Caught exception: ', $e->getMessage(), "\n";
sleep(10);
}
}
Кстати. То, что вы просите, должно быть сделано не с использованием исключений, а в случае ошибок. Если об ошибке сообщается, и она может быть исправлена, вы можете написать глобальный обработчик для ошибок, и внутри этого дескриптора ошибки решить, является ли ошибка проблемой, вы хотите закрыть свой сценарий или просто зарегистрировать его и вернуться к выполнению сценария, как если быТам нет ошибки вообще. Но речь идет об ошибках, а не об исключениях.