这是一个无限循环,因为例外?

时间:2016-11-15 07:45:39

标签: php

我有以下代码:

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)并且循环将是无限的。

这是正确的还是我遗失了什么?

3 个答案:

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