Объяснение while (false! == ($ f = readdir ($ d))) { - PullRequest
3 голосов
/ 03 октября 2011

Я только начал практиковать ООП в php через книгу «Концепции, методы и коды». К сожалению, я никогда не работал с каталогами и файлами в 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 кстати

Ответы [ 3 ]

4 голосов
/ 03 октября 2011

! == похоже на! =, Но в дополнение к проверке равенства он также проверяет тип.

Это важное различие, потому что иногда что-то является "ложным" или "правдивым", но не совсемЛогический тип со значением false или true.Например, число 0, как правило, рассматривается как ложное.

Вторая немного запутанная часть здесь заключается в том, что код проверяет false !== (assignment) в цикле while.Это в основном проверка того, было ли присвоение действительным значением.

Итак, чтобы получить все это вместе, код:

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

... переводится в нечто вроде:

В то время как $f назначен объект из readdir($d) do ...

1 голос
/ 03 октября 2011

=== означает «равное значение и равный тип»
!== означает «не равное значение или не равный тип»

Использование ==, а пустая строка равна false. Используя ===, они не равны, потому что тип отличается.

!= и !== работают одинаково. Дополнительный знак = означает, что тип также должен проверяться, а не только эквивалентные значения.

0 голосов
/ 03 октября 2011

== приведет значения к одному и тому же типу для сравнения. Если readdir вернет 0, то False==0, вероятно, будет иметь значение true. Однако False===0 не будет правдой.

Есть много людей, которые знают намного больше об операторах сравнения, приведении типов, типах значений и т.д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...