Имя файла начинается с нуля

firep91613

Новичок
Цитата из книги: "Следует отметить, что результат присвоения переменной $file значения функции readdir() сравнивается со значением false. Обычно в качестве аргумента цикла while() используется выражение $file = readdir($dir), однако в нашем случае это недопустимо, т. к. имя файла может начинаться с 0, что в контексте оператора while() будет рассматриваться как false и приводить к остановке цикла."

Я что-то не возьму в толк. Допустим файл называется "0file.txt", как тут будет false? Это же не строка "0".
 

miketomlin

Новичок
Допустим файл называется "0file.txt", как тут будет false? Это же не строка "0".
Так имя может состоять и из одного нуля 😉

Вообще для чисел известный факт, что начинающаяся с числа строка приводится к этому числу. С булевыми ХЗ – гляньте соотв. раздел мана. В восьмерке проверил приведение "0file.txt" – true.
 
Последнее редактирование:

AnrDaemon

Продвинутый новичок
Элементарно решается
PHP:
while (($f = readdir($dir)) !== false) {
    // …
}
Хотя в частном случае, если тебе, например, нужно получить из каталога только файлы известного типа, проще использовать glob().
 

antonio

Moderator
Команда форума
Я тоже особо не вникал. Наверное, имеется в виду, что в такой конструкции обычно пишут так:
Код:
while (($obj = readdir($dir)) !== false)
операторы !== и === подразумевают так же сравнение типов левого и правого операндов. Я бы назвал это "супер строгим" сравнением. Ноги у данного подхода растут исключительно из попытки сделать "любое" выражение вычисляемым, в противном случае пришлось бы выдавать ошибку на этапе runtime, поскольку не всегда можно определить тип выражения на этапе компиляции и/или разбора.
 

AnrDaemon

Продвинутый новичок
Имя файла может быть литерально "0". Хочешь себе такой сюрприз в коде?
 
Сверху