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

firep91613

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

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

Вообще для чисел известный факт, что начинающаяся с числа строка приводится к этому числу. С булевыми ХЗ – гляньте соотв. раздел мана. В восьмерке проверил приведение "0file.txt" – true.
 
Последнее редактирование:
Элементарно решается
PHP:
while (($f = readdir($dir)) !== false) {
    // …
}

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