首页 > 开发 > PHP > 正文

浅谈PHP中Stream(流)

2024-05-04 23:36:00
字体:
来源:转载
供稿:网友
Stream是PHP开发里最容易被忽视的函数系列(SPL系列,Stream系列,pack函数,封装协议)之一,但其是个很有用也很重要的函数。Stream可以翻译为“流”,在Java里,流是一个很重要的概念。
 

流(stream)的概念源于UNIX中管道(pipe)的概念。在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备、外部文件等。根据流的方向又可以分为输入流和输出流,同时可以在其外围再套上其它流,比如缓冲流,这样就可以得到更多流处理方法。

PHP里的流和Java里的流实际上是同一个概念,只是简单了一点。由于PHP主要用于Web开发,所以“流”这块的概念被提到的较少。如果有Java基础,对于PHP里的流就更容易理解了。其实PHP里的许多高级特性,比如SPL,异常,过滤器等都参考了Java的实现,在理念和原理上同出一辙。

比如下面是一段PHP SPL标准库的用法(遍历目录,查找固定条件的文件):
 

  1. class RecursiveFileFilterIterator extends FilterIterator 
  2.  // 满足条件的扩展名 
  3.  protected $ext = array('jpg','gif'); 
  4.  /** 
  5.   * 提供 $path 并生成对应的目录迭代器 
  6.   */ 
  7.  public function __construct($path
  8.  { 
  9.    parent::__construct(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path))); 
  10.  } 
  11.  /** 
  12.   * 检查文件扩展名是否满足条件 
  13.   */ 
  14.  public function accept() 
  15.  { 
  16.    $item = $this->getInnerIterator(); 
  17.    if ($item->isFile() && in_array(pathinfo($item->getFilename(), PATHINFO_EXTENSION), $this->ext)) 
  18.    { 
  19.      return TRUE; 
  20.    } 
  21.  } 
  22. // 实例化 
  23. foreach (new RecursiveFileFilterIterator('D:/history'as $item
  24.  echo $item . PHP_EOL; 
?
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表