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