#php #directory #conditional-statements
#php #каталог #условные операторы
Вопрос:
Я только начал практиковать ООП в 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
Ответ №1:
!== похоже на != но в дополнение к проверке равенства он также проверяет тип.
Это важное различие, потому что иногда что-то является «ложным» или «правдивым», но на самом деле это не логический тип со значением false или true. Например, число 0 обычно рассматривается как false .
Вторая немного запутанная часть здесь заключается в том, что код проверяет false !== (assignment)
в цикле while . Это в основном проверка, было ли присвоено допустимое значение.
Итак, чтобы вывести все это вместе, код:
while(false !== ($f=readdir($d))
…переводится примерно как:
While $f
присваивается объект из readdir($d)
do …
Комментарии:
1. Будьте очень осторожны, этот код только что стоил мне поздней ночи: когда каталог не существует, это создает бесконечный цикл. Наряду с протоколированием ошибок при каждой попытке. этот цикл — кошмар! Проблема в том, что он не возвращает явное логическое значение false, когда сам ресурс каталога равен false . Похоже, отчасти виновата документация для этой функции!
Ответ №2:
===
означает «равное значение и равный тип»
!==
означает «не равное значение или не равный тип»
Использование ==
, и пустая строка равна false . ===
Однако при использовании они не равны, потому что тип отличается.
!=
и !==
работают таким же образом. Дополнительный =
знак означает, что тип также должен быть проверен, а не только эквивалентные значения.
Комментарии:
1. итак, в этом условии мы удостоверяемся, что значения и типы файлов равны, и это означает, что мы помещаем файлы с похожими типами в массив?
2. Ключевое слово здесь — принуждение к типу.
Ответ №3:
==
Будет принудительно приводить значения к одному и тому же типу для их сравнения. Если readdir
возвращает 0
, то False==0
, вероятно, будет оценено как true . Однако False===0
это не будет правдой.
Есть много людей, которые знают намного больше об операторах сравнения, приведении типов, типах значений и т. Д. Я удалю это, когда они ответят.