Предположим, у меня есть такие коды:
try{ doTaskA(); doTaskB(); doTaskC(); } catch(MyException $e){ fixMyException(); }
Когда doTaskA () выбрасывает MyException, я хочу, чтобы программа проходила через fixMyException (), затем она возвращается и продолжает выполнение doTaskB () и doTaskC (). Является ли это возможным?
То же самое должно применяться к другим задачам, то есть все doTaskA / B / C () могут вызывать одно и то же исключение, и я хочу, чтобы программа могла перейти к незавершенным задачам каждый раз после выполнения функции fixMyException ().
Есть ли что-нибудь вроде функции «продолжить» или «возобновить» в обработке исключений?
Я проверил руководство PHP, но похоже, что такой структуры управления не существует. Если да, то в чем лучшая практика для разработки программы, которая может делать то, что я хочу? (Предположим, у меня более 10 задач внутри блока try).
function do_all_tasks($position=0) { $tasks = array('doTaskA', 'doTaskB', 'doTaskC', ...); $size = count($tasks); for ($i=$position; $i<$size; ++$i) { try { $func = $tasks[$i]; $func(); } catch (Exception $e) { fixMyException(); do_all_tasks($i+1); }; } } do_all_tasks();
try{ doTaskA(); } catch(MyException $e){ fixMyException(); } try{ doTaskB(); } catch(MyException $e){ fixMyException(); } try{ doTaskC(); } catch(MyException $e){ fixMyException(); }
Как это иначе, чем делать
try { doTaskA(); } catch (MyException $e) { fixMyException(); } try { doTaskB(); } catch (MyException $e) { fixMyException(); } try { doTaskC(); } catch (MyException $e) { fixMyException(); }
Нет, это невозможно. Вам нужно будет поместить каждую из doTask*()
в отдельный отдельный блок try-catch
.