流(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;
- }
新闻热点
疑难解答