在我的简单代码中,“ 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,并在以后必要时将其应用于代码块中的字符串。