今天我正在試一個目錄搜尋的程式,想到了 PHP5 在 SPL (Standard PHP Library) 裡有定義了一個 DirectoryIterator 的類別。而在找尋相關資料時,發現了一個好站: PHP Wiki 。
PHP Wiki 介紹了很多 PHP 的資料與教學,我想對 PHP 玩家來說是個很不錯的參考網站。其中 SPL 分類裡更是提到了很多 SPL 內建類別的用法,讓我這個 PHP5 新手學到了很多有趣的東西。
不過要小心一點: PHP 5.1 以後的 SPL 已經改了相當多,有些 PHP Wiki 的範例我在測試時會出現問題。比較好的方法是查看一下 PHP 手冊有關 SPL 的章節,並在轉換 PHP 版本時使用 get_declared_classes 及 get_declared_interfaces 來查看相關已定義的類別與介面。
以下我節錄 DirectoryIterator 的用法,其他的範例請大家自行到 PHP Wiki 去看看。
註:以下都是使用 Windows XP 加上 PHP 5.1 以後的版本。
假設現在我們想要列舉目前工作路徑的資料夾與檔案,我們可以先用 DirectoryIterator 來建立這個物件:
1
| |
現在我們已經有個 $dir 物件了,由於 DirectoryIterator 實作了 Iterator 介面,所以我們可以用以下程式來列舉出所有資料夾及檔案:
1 2 3 4 5 6 | |
當然,如果 PHP5 的 Iterator 能耐只有這樣的話,那就太遜了。我們可以改用 foreach 來取代剛剛的程式:
1 2 3 4 | |
有沒有一種簡單到想打人的感覺?
那如果我想一次把該路徑下的子目錄也一起列舉出來呢?那麼就要改用 RecursiveDirectoryIterator 。
我們一樣也是先建立一個 $dir 物件,只是這次是用 RecursiveDirectoryIterator :
1
| |
然後我們會用到一個特別的用法,在 foreach 中再用 RecursiveIteratorIterator 去包住 $dir 物件:
1 2 3 4 | |
這樣就能一次遞迴顯示當前工作路徑下所有子目錄及檔案了。
其他還有一些不錯的 SPL 資源:
- SPL - Standard PHP Library
- Introduction to Standard PHP Library
- Introducing PHP 5's Standard Library
- Iterators in PHP5
想學好 PHP5 嗎?先把 SPL 搞定吧! (這是寫給我自己看的)