PHP:捕获异常后是否可以恢复try块?

时间:2011-09-01 14:37:23

标签: php exception

假设我有这样的代码:

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

当doTaskA()抛出MyException时,我希望程序通过fixMyException(),然后返回并继续执行doTaskB()和doTaskC()。有可能吗?

同样的事情应该适用于其他任务,即所有doTaskA / B / C()都可能抛出相同的异常,并且我希望程序在每次执行fixMyException()后都可以继续执行未完成的任务。 / p>

在异常处理中是否有“继续”或“恢复”功能?

我已经检查了PHP手册,但似乎这样的控制结构不存在。如果是这样,设计可以做我想要的程序的最佳做法是什么? (假设我在try块中有超过10个任务)。

4 个答案:

答案 0 :(得分:4)

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 :(得分:1)

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

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

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

答案 2 :(得分:1)

这与做什么有什么不同

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

答案 3 :(得分:1)

不,不可能。您需要将每个doTask*()函数放在它自己独立的try-catch块中。