PHP:`$ handle`是一个特殊变量吗?

时间:2017-02-21 17:12:24

标签: php

我正在尝试理解以下PHP脚本

<?php

    if ($handle = opendir('files'.'/')) {
        while ($file = readdir($handle)) {
            echo $file.'<br>';
        }
    }

?>

我不完全理解这是如何工作的,因为$handle变量似乎要么不被声明,要么被声明在if条件内。但如果它在if条件内声明,那么测试的条件是什么?同样对于while循环,它测试的是什么?我直观地知道它是以某种方式测试目录列表的结尾,但确切地说,if条件失败或while条件失败会发生什么?在这里使用if类似于错误处理方法吗?我查找了PHP中的错误处理,但没有找到。

3 个答案:

答案 0 :(得分:3)

在PHP中,赋值操作的总值是指定的值。这意味着当你这样做时:

($handle = opendir('files'.'/'))

您不仅要将$handle分配给opendir()的结果,而且整个陈述也会评估该结果。

同样在PHP中,任何有效对象都被视为“truthy”,因此它可以在布尔检查中求值为true。所以这个:

if ($handle = opendir('files'.'/'))

opendir()的结果分配给$handle会检查truefalse的分配结果。因此,如果opendir()失败,则if会看到false并且未输入该块。

while或任何其他检查作业结果的操作相同。

答案 1 :(得分:2)

在每种情况下,将值分配给变量,然后测试其真实性。

您可以将代码重写为:

$handle = opendir('files'.'/');
if ($handle) {
    $file = readdir($handle);
    while ($file) {
        echo $file.'<br>';
        $file = readdir($handle)
    }
}
  

那么,这是否意味着if条件不可能失败?

如果opendir()未返回真值,则会失败。例如,如果目录不存在,就会发生这种情况。

答案 2 :(得分:1)

这是一种可以在PHP中使用的编码风格

正在if语句中同时创建和评估变量。 opendir如果失败则会返回false,这意味着if条件内的代码将无法运行。

一般来说这种风格并不是一个好主意,因为这种代码通常是一个==的错误,例如if($variable=true)if($variable==true)差异很大但不是如果你正在扫描代码,一定很容易发现。

在while循环中使用$file =是一种非常正常的方法,用于迭代某些东西。

readdir - http://php.net/manual/en/function.readdir.php - 可迭代,因此可以在此风格中使用