我有以下代码:
do {
try {
$result = $class->function_x($params); //this will fire an Exception
break;
}
catch (Exception $e)
{
error_log($e->getMessage());
sleep(5);
}
} while(true);
这是一个无限循环吗?
方法调用触发一个Exception,所以catch写入error_log
并等待5秒,但由于Exception,不执行break(打破while)并且循环将是无限的。
这是正确的还是我遗失了什么?
答案 0 :(得分:1)
是的,如果$class->function_x($params);
总是抛出异常,那么它就是无限循环。
一旦抛出异常,控制就被赋予catch块,break
永远不会被执行。
答案 1 :(得分:1)
如果$result = $class->function_x($params);
抛出Exception
,它将永远不会转到break;
,因为它会在catch
之后跳出Exception
。
所以是,它看起来像无限循环。
答案 2 :(得分:1)
您不应在try catch
内使用break语句。您可以使用goto执行此任务。这可以防止您的例外情况:
do {
try {
$result = $class->function_x($params);
if(something) goto bre;
} catch(Exception $e) {
error_log($e->getMessage());
sleep(5);
}
bre:
} while(true);