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

PHP:“$handle”是一个特殊变量吗?,php,Php,我试图理解以下PHP脚本 <?php if ($handle = opendir('files'.'/')) { while ($file = readdir($handle)) { echo $file.'<br>'; } } ?> 我不完全理解它是如何工作的,因为$handle变量似乎要么没有声明,要么在if条件中声明。但是如果它是在if条件中声明的,那么条件测试的目的是什么?类似地,对

我试图理解以下PHP脚本

<?php

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

?>


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

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

正在if语句中同时创建和计算变量<如果失败,code>opendir
将返回
false
,这意味着它不会运行
if
条件中的代码

一般来说,这种风格不是一个好主意,因为通常这种代码实际上是一个bug,它应该是一个
=
,例如
if($variable=true)
if($variable==true)
有很大的不同,但如果您在扫描代码,就不一定容易发现

然而,在while循环中使用
$file=
是一种非常正常的方法,用于迭代某些内容


readdir
-是可编辑的,因此可以在这种样式中使用

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

($handle = opendir('files'.'/'))
不仅将
$handle
赋值给
opendir()
的结果,而且整个语句的计算结果也是该结果

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

if ($handle = opendir('files'.'/'))
opendir()
的结果分配给
$handle
,并将检查该分配的结果是否为
true
false
。因此,如果
opendir()
失败,则
if
会看到一个
false
,并且不会输入块


对于
while
,或检查赋值结果的任何其他操作,也是如此。

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

您可以将代码重写为:

$handle = opendir('files'.'/');
if ($handle) {
    $file = readdir($handle);
    while ($file) {
        echo $file.'<br>';
        $file = readdir($handle)
    }
}
$handle=opendir('files'./');
如果($handle){
$file=readdir($handle);
while($file){
回显$file.“
”; $file=readdir($handle) } }
那么,这是否意味着if条件不可能失败


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

那么,这是否意味着
if
条件不可能失败?此外,我已经阅读了
readdir
函数的文档,但仍然不清楚发生了什么。这看起来像是使用
while
循环,其中应该使用
for
循环。opendir可能返回false,在这种情况下它将失败