在我的简单代码中,'continue'跳过条件评估并直接跳转到循环体(if行)的开头,导致无限循环。我可以看到,正是在调试和恢复执行断点循环条件(它没有中断)或使用跳过时发生的情况。可能只是我累了,但我很无能为力。
while ( ($line = _e(fgets($dump_file))) !== FALSE )
{
if ($line === '')
{
echo 'continue';
continue;
}
答案 0 :(得分:2)
您应该使用break
关键字来停止循环。
继续将转到下一个循环迭代的开始,同时跳过循环的其余部分。
更多信息:
答案 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的答案标记为所有努力的解决方案。