Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 这是一个无休止的循环吗?_Php - Fatal编程技术网

Php 这是一个无休止的循环吗?

Php 这是一个无休止的循环吗?,php,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); 这是一个无

我有以下代码:

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\u log
并等待5秒钟,但由于异常,中断不会执行(中断while),循环将是无止境的


这是正确的还是我遗漏了什么

是,如果
$class->function\ux($params)总是抛出异常,然后它是无止境的循环


一旦抛出异常,控件将被赋予catch块,并且
break
将永远不会执行。

如果
$result=$class->function\u x($params)抛出
异常
它永远不会进入
中断,因为它将在发生
异常后跳出到
捕获


所以是的,它看起来像是无止境的循环。

您不应该在
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);

我认为这实际上不是一个编码问题,而是一个哲学辩论的问题。就我个人而言,我会说任何
do{something()},而(true)
-默认情况下,无论其内部工作方式如何,循环都是一个无止境的循环。是的。它看起来像是无止境的循环。值得一提的是:不要使用异常来控制代码流。如果希望它再次循环,请使用标志/返回值。例外仅适用于例外情况。我同意您的所有评论,但不是我的代码我正在检查应用程序,代码已经存在,我必须修复它。谢谢不是我的代码我正在检查应用程序,代码已经存在,我必须修复它。谢谢