大家。我今天看到了一个PHP while
循环示例,我不太了解。
示例(Complete code)
// Open XML file
$fp=fopen("note.xml","r");
// Read data
while ($data=fread($fp,4096)) { // Line about which I have questions
xml_parse($parser,$data,feof($fp)) or
die (sprintf("XML Error: %s at line %d",
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser)));
}
$data=fread($fp,4096)
循环括号内的while
表达式似乎根本没有变化。这只是一个任务声明。这个循环如何结束?
解析完成后,函数xml_parse($parser,$data,feof($fp))
可能会结束,但我不知道它将如何影响while
循环的测试条件。我觉得XML文件的解析会无限期重复。</ p>
此外,如果将赋值表达式作为循环的测试条件,我们是否真的只是想查看赋值的 RIGHT 是否会产生TRUE
或FALSE
确定是否结束循环?我对此表示怀疑,因为它会为此示例生成无限循环,因为$data
一旦被分配,将始终返回TRUE
。
由于
答案 0 :(得分:1)
当fread()
函数返回false时结束,当它到达文件末尾时会返回false。您可以在fread的PHP文档中确认这一点:
关于评估赋值的问题,在PHP中评估赋值时,它将返回变量的最终值(例如,与Javascript不同,其中赋值确实是被评估的值),所以你& #39;基本上既为函数中的变量赋值,又在没有任何额外语法的情况下评估该函数的结果(赋值给变量)。
答案 1 :(得分:0)
工作
while(there is data to read) OR (!EOF)
break when reach (EOF==true) OR no data to read OR return false
* EOF (end of file)
答案 2 :(得分:0)
正如php手册所说,函数fread
会在失败时返回读取字符串或FALSE。
这意味着:
$data=fread($fp,4096)
在上述声明中,$data
的值可以是文件note.xml
或false
的内容。
您可能知道,while循环将持续到条件为false
。仅当false
函数无法从文件中读取数据时,此语句为fread($fp,4096)
,此时没有数据可供读取。