假设我有这样的代码:
try{
doTaskA();
doTaskB();
doTaskC();
} catch(MyException $e){
fixMyException();
}
当doTaskA()抛出MyException时,我希望程序通过fixMyException(),然后返回并继续执行doTaskB()和doTaskC()。有可能吗?
同样的事情应该适用于其他任务,即所有doTaskA / B / C()都可能抛出相同的异常,并且我希望程序在每次执行fixMyException()后都可以继续执行未完成的任务。 / p>
在异常处理中是否有“继续”或“恢复”功能?
我已经检查了PHP手册,但似乎这样的控制结构不存在。如果是这样,设计可以做我想要的程序的最佳做法是什么? (假设我在try块中有超过10个任务)。
答案 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
块中。