在我的简单代码中,“ continue”跳过条件求值,直接跳到循环体的开始(if行),从而导致无限循环。我可以看到,这是在循环条件下使用断点调试和恢复执行(不中断)或使用跨步时发生的。可能只是我很累,但我一无所知。

while ( ($line = _e(fgets($dump_file))) !== FALSE )
{
    if ($line === '')
    {
        echo 'continue';
        continue;
    }

最佳答案

您正在将while循环中_e的结果分配给$ line。我假设您正在从WordPress获取_e,该文档记录在这里:http://codex.wordpress.org/Function_Reference/_e

返回值
(无效)
此函数不返回值。

因此,您的循环基本上说:

while (void !== False) {
    continue;
}

当然,这将永远持续下去。
请注意,有几个答案表明应该使用break语句。上面的代码设计为在命中文件结尾(EOF)时终止循环,fgets返回该结尾False。每次运行循环时,fgets都会读取下一行,直到到达文件末尾,这时它将返回False
从php.net:

返回最大为字符串的字符串-从handle指向的文件中读取1个字节。如果文件指针中没有更多数据可读取,则返回FALSE。

这里的问题不是不需要break语句,因为当fgets返回False时while条件将为false。问题是_e返回void其中!== False,因此循环无限期地继续。
快速解决方案是删除while语句中的_e,并在以后必要时将其应用于代码块中的字符串。

09-25 17:12
查看更多