php继续跳过条件评估

时间:2015-06-17 14:54:36

标签: php

在我的简单代码中,'continue'跳过条件评估并直接跳转到循环体(if行)的开头,导致无限循环。我可以看到,正是在调试和恢复执行断点循环条件(它没有中断)或使用跳过时发生的情况。可能只是我累了,但我很无能为力。

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

4 个答案:

答案 0 :(得分:2)

您应该使用break关键字来停止循环。

继续将转到下一个循环迭代的开始,同时跳过循环的其余部分。

更多信息:

http://php.net/manual/en/control-structures.break.php

http://php.net/manual/en/control-structures.continue.php

答案 1 :(得分:2)

continue将始终继续循环的下一次迭代。

循环是无限的,因为$line的值永远不会在循环中发生变化,因此循环无限执行或根本不执行,具体取决于$line的初始值。

break将突破循环

答案 2 :(得分:1)

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

  

返回值

     

(无效)

     

此功能不返回值。

所以,你的循环基本上说:

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

当然,这将永远持续下去。

请注意,有几个答案表明应该使用break语句。上面的代码用于在命中文件结尾(EOF)时中止循环,fgets返回False。每次循环运行时,fgets都会读取下一行,直到它到达文件末尾,此时它将返回False

来自php.net:

  

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

这里的问题不是需要break语句,因为当fgets返回False时,while条件将为false。问题是_e返回void !== False,因此循环会无限期地继续。

快速解决方案是删除while语句中的_e,并在必要时将其应用于代码块中的字符串。

答案 3 :(得分:1)

好的,所以这里发生了什么。无限循环的问题确实是由于我的_e函数没有考虑它的参数是FALSE值并且总是返回一个字符串所以while循环条件总是按照Ryan Vincent和geis的建议评估为TRUE。

然而,这并不能解释为什么我的调试器不会因此而中断。原来这个问题没有关系。它自己的调试器正在行动,现在拒绝在各种随机断点上中断,没有充分的理由。

将geis的答案标记为所有努力的解决方案。