这是一个无限循环吗,因为异常


is this an endless loop because of the exception?

我有以下代码:

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);