while的解释(false!==($ f = readdir($ d))){

时间:2011-10-03 00:52:10

标签: php directory conditional-statements

我刚开始通过概念,技术和代码一书在php中练习OOP。不幸的是,我从未使用PHP中的目录和文件,并且感觉很难理解这个条件,这里是完整的代码

function DirectoryItems($directory){
  $d = "";
  if(is_dir($directory)){
     $d = opendir($directory) or die("Couldn't open directory.");
     while(false !== ($f=readdir($d))){
      if(is_file("$directory/$f")){
      $this->filearray[] = $f;
}
}
closedir($d);
}else{
//error
die("Must pass in a directory.");
}
}

我所能理解的首先是我们打开那个目录之后检查它是目录的参数,而不是我们读取目录并将目录中的所有文件放入一个数组但是条件令我困惑的是什么!==我只知道!=

本书用PHP4和5 btw

编写

3 个答案:

答案 0 :(得分:4)

!==就像!=但除了检查相等之外,它还会检查类型。

这是一个重要的区别,因为有时某些东西是“假的”或“真实的”,但实际上并不是一个值为false或true的布尔类型。例如,数字0通常被视为假。

这里的第二个有点令人困惑的部分是代码在while循环中检查false !== (assignment)。这基本上是检查赋值是否为有效值。

所以一起编写代码:

while(false !== ($f=readdir($d))

...转换为:

$freaddir($d)分配了一个来自{{1}}的对象...

答案 1 :(得分:1)

===表示“等值和相等的类型”
!==表示“不等值或不等于”

使用==,空字符串等于false。但是,使用===,它们并不相同,因为类型不同。

!=!==的工作方式相同。额外的=符号表示也应检查类型,而不仅仅是等效值。

答案 2 :(得分:0)

==会将值强制转换为相同类型以进行比较。如果readdir返回0,则False==0可能会评估为真。但是,False===0不会是真的。

有很多人对比较运算符,类型强制,值类型等了解得更多。我会在他们回答时删除它。