需要帮助了解PHP的示例

时间:2017-02-15 04:18:35

标签: php loops while-loop

大家。我今天看到了一个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 是否会产生TRUEFALSE确定是否结束循环?我对此表示怀疑,因为它会为此示例生成无限循环,因为$data一旦被分配,将始终返回TRUE

由于

3 个答案:

答案 0 :(得分:1)

fread()函数返回false时结束,当它到达文件末尾时会返回false。您可以在fread的PHP文档中确认这一点:

http://php.net/fread

关于评估赋值的问题,在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.xmlfalse的内容。 您可能知道,while循环将持续到条件为false。仅当false函数无法从文件中读取数据时,此语句为fread($fp,4096),此时没有数据可供读取。