2011-06-14 98 views
11

我正在完成一個代碼段,列出目錄中的文件。我沒有問題列出目錄中的文件,但出於某種原因,我可以使用isDot()方法來確保文件不是「。」。要麼 」..」 。在此錯誤以下結果如下:我切換到使用遞歸迭代器我用的目錄迭代器爲什麼isDot()會失敗? (PHP)

Fatal error: Call to undefined method SplFileInfo::isDot() in .... 

之前,它工作得很好。下面的代碼有什麼問題嗎?它應該工作。

$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($pathToFolder)); 

//if there is a subdirectory it makes sure the proper extension is passed 
foreach($files as $name => $file){  

      if (!$file->isDot()) { //this is where it shuts me down   

      $realfile = str_replace($pathToFolder, "", $file); 
      $url = getDownloadLink($folderID, $realfile); 
     $fileArray[] = $url;    

     }  
} 

回答

28

這是,因爲DirectoryIterator::current()(該方法中,這是一個foreach -loop內呼叫)返回一個對象,該對象是DirectoryIterator類型本身。 FileSystemIterator(即RecursiveDirectoryIterator擴展)返回SplFileInfo的對象爲默認值。是什麼回報,你可以通過影響flags

$files = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator(
    $pathToFolder, 
    FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_SELF)); 

但在你的情況,你並不需要測試,如果一個項目是一個點文件。只需設置FilesystemIterator::SKIP_DOTS,它們就不會出現。請注意,這也是default behavior

+2

很好的解釋!感謝您向我解釋這一點。 – thomascirca 2011-06-14 00:41:19