流(stream)的概念源于UNIX中管道(pipe)的概念。在UNIX中,管道是一條不間斷的字節流,用來實現程序或進程間的通信,或讀寫外圍設備、外部文件等。根據流的方向又可以分為輸入流和輸出流,同時可以在其外圍再套上其它流,比如緩沖流,這樣就可以得到更多流處理方法。
PHP里的流和Java里的流實際上是同一個概念,只是簡單了一點。由于PHP主要用于Web開發,所以“流”這塊的概念被提到的較少。如果有Java基礎,對于PHP里的流就更容易理解了。其實PHP里的許多高級特性,比如SPL,異常,過濾器等都參考了Java的實現,在理念和原理上同出一轍。
比如下面是一段PHP SPL標準庫的用法(遍歷目錄,查找固定條件的文件):
- class RecursiveFileFilterIterator extends FilterIterator
- {
- // 滿足條件的擴展名
- protected $ext = array('jpg','gif');
- /**
- * 提供 $path 并生成對應的目錄迭代器
- */
- public function __construct($path)
- {
- parent::__construct(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)));
- }
- /**
- * 檢查文件擴展名是否滿足條件
- */
- public function accept()
- {
- $item = $this->getInnerIterator();
- if ($item->isFile() && in_array(pathinfo($item->getFilename(), PATHINFO_EXTENSION), $this->ext))
- {
- return TRUE;
- }
- }
- }
- // 實例化
- foreach (new RecursiveFileFilterIterator('D:/history') as $item)
- {
- echo $item . PHP_EOL;
- }
新聞熱點
疑難解答