$list_of_files
является ссылаясь на переменную, которая не совпадает с свойством, которое будет $this->list_of_files
.
Переменные, объявленные/ссылки в функции доступны только в этой функции (если вы не используете глобальные - но это, как правило, считается «зло», и следует избегать)
Свойства доступны для всех методов в классе (если они не являются статическими) и сохраняются для жизни объекта.
<?php
//lets show all error so we can see if anything else is going on..
error_reporting(E_ALL & ~E_NOTICE);
class listOfFiles {
private $list_of_files = [];
function __construct() {
if ($handle = opendir(WEB_STORAGE_DIR)) {
while (false !== ($entry = readdir($handle))) {
$this->list_of_files[$entry] = filesize(WEB_STORAGE_DIR.DIRECTORY_SEPARATOR.$entry);
}
closedir($handle);
// Remove . and .. from the list
unset($this->list_of_files['.']);
unset($this->list_of_files['..']);
}
}
function is_empty() {
return empty($this->list_of_files);
}
}
Является ли проблема, что каталог не существует? Было бы лучше, чтобы проверить это, прежде чем пытаться открыть, а также позволит, что делать, если она действительно существует, но вы не можете на самом деле читать:
<?php
//lets show all error so we can see if anything else is going on..
error_reporting(E_ALL & ~E_NOTICE);
class listOfFiles {
private $list_of_files = [];
function __construct() {
if(!is_dir(WEB_STORAGE_DIR)){
throw new Exception("Missing Web Storage Directory");
}
$handle = opendir(WEB_STORAGE_DIR);
if (!$handle) {
throw new Exception("Could not read Web Storage Directory");
}
else{
while (false !== ($entry = readdir($handle))) {
$this->list_of_files[$entry] = filesize(WEB_STORAGE_DIR.DIRECTORY_SEPARATOR.$entry);
}
closedir($handle);
// Remove . and .. from the list
unset($this->list_of_files['.']);
unset($this->list_of_files['..']);
}
}
function is_empty() {
return empty($this->list_of_files);
}
}
Я добавил error_reporting(E_ALL & ~E_NOTICE);
в примерах, как это было бы убедиться, что вы видите ошибки и можете отладить вашу проблему. Больше информации об этом здесь: http://php.net/manual/en/function.error-reporting.php
Спасибо, установка '$ this-> list_of_files [$ entry]' в цикле while завершилась неудачно, частный массив, объявленный как свойство объекта, остается неинициализированным. – Ralph
Вы уверены, что путь действителен - откуда происходит WEB_STORAGE_DIR? Я тестировал с помощью '__DIR__' вместо этого, который указывает на каталог исполняемого файла, и он работает: см. Пример кода здесь http://pastebin.com/gAAzZSr6 – Theo
Вы говорите, что это не удается, в цикле while - вы получаете любые ошибки или предупреждения? попробуйте добавить 'error_reporting (E_ALL & ~ E_NOTICE);' вверху вашего файла, чтобы убедиться, что вы видите ошибки - больше информации об этом здесь: http://php.net/manual/en/function.error-reporting.php – Theo