我有以下代码:
do {
try {
$result = $class->function_x($params); //this will fire an Exception
break;
}
catch (Exception $e)
{
error_log($e->getMessage());
sleep(5);
}
} while(true);
这是一个无限循环吗?
方法调用触发一个异常,因此catch写入error_log
并等待5秒,但由于异常,没有执行break(中断while),循环将是无止境的。
是正确的还是我错过了什么?
如果$result = $class->function_x($params);
抛出Exception
,它将永远不会跳转到break;
,因为它将在Exception
之后跳转到catch
。
所以是的,它看起来像无限循环
是的,如果$class->function_x($params);
总是抛出异常,那么它就是无限循环。
一旦抛出异常,控制被交给catch块,break
将永远不会被执行。
不应该在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);