PHP: возможно ли возобновить блок try после того, как исключение поймано? - PullRequest
0 голосов
/ 01 сентября 2011

Допустим, у меня есть такие коды:

try{
    doTaskA(); 
    doTaskB(); 
    doTaskC();
} catch(MyException $e){
    fixMyException();
}

Когда doTaskA () генерирует MyException, я хочу, чтобы программа прошла через fixMyException (), затем возвращается и продолжает выполнять doTaskB () и doTaskC (). Возможно ли это?

То же самое должно применяться к другим задачам, то есть все doTaskA / B / C () могут выдавать одно и то же исключение, и я хочу, чтобы программа могла переходить к незавершенным задачам каждый раз после выполнения fixMyException () ..

Есть ли что-то вроде функции "продолжить" или "возобновить" в обработке исключений?

Я проверил руководство по PHP, но, похоже, такой структуры управления не существует. Если да, то как лучше разработать программу, которая может делать то, что я хочу? (Предположим, у меня более 10 задач внутри блока try).

Ответы [ 4 ]

4 голосов
/ 01 сентября 2011
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();
1 голос
/ 01 сентября 2011

Чем это отличается от

try {
    doTaskA(); 
} catch (MyException $e) {
    fixMyException();
}
try {
    doTaskB(); 
} catch (MyException $e) {
    fixMyException();
}
try {
    doTaskC(); 
} catch (MyException $e) {
    fixMyException();
}
1 голос
/ 01 сентября 2011

Нет, это невозможно. Вам нужно было бы поместить каждую из doTask*() функций в отдельный блок try-catch.

1 голос
/ 01 сентября 2011
try{
    doTaskA(); 
} catch(MyException $e){
    fixMyException();
}

try{
    doTaskB(); 
} catch(MyException $e){
    fixMyException();
}

try{
    doTaskC(); 
} catch(MyException $e){
    fixMyException();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...