$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 [$條目]'在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