设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 数据 手机 公司
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP生成器和迭代器对象的比较是什么样的?

发布时间:2022-11-17 08:42 所属栏目:121 来源:互联网
导读:这篇文章给大家分享的是PHP生成器和迭代器对象的比较是怎样的?,对大家学习和理解有一定的参考价值和帮助,有这方面学习需要的朋友,接下来就跟随小编一起学习一下吧。 生成器最大的优势就是简单,和实现Iterator的类相比有着更少的样板代码,并且代码的可读
  这篇文章给大家分享的是“PHP生成器和迭代器对象的比较是怎样的?”,对大家学习和理解有一定的参考价值和帮助,有这方面学习需要的朋友,接下来就跟随小编一起学习一下吧。
 
  生成器最大的优势就是简单,和实现Iterator的类相比有着更少的样板代码,并且代码的可读性也更强. 例如, 下面的函数和类是等价的:
 
  <?php
 
      function getLinesFromFile($fileName) {
 
          if (!$fileHandle = fopen($fileName, 'r')) {
 
              return;
 
          }
 
          while (false !== $line = fgets($fileHandle)) {
 
              yield $line;
 
          }
 
          fclose($fileHandle);
 
      }
 
      // versus...
 
      class LineIterator implements Iterator {
 
          protected $fileHandle;
 
          protected $line;
 
          protected $i;
 
          public function __construct($fileName) {
 
              if (!$this->fileHandle = fopen($fileName, 'r')) {
 
                  throw new RuntimeException('Couldn\'t open file "' . $fileName . '"');
 
              }
 
          }
 
          public function rewind() {
 
              fseek($this->fileHandle, 0);
 
              $this->line = fgets($this->fileHandle);
 
              $this->i = 0;
 
          }
 
          public function valid() {
 
              return false !== $this->line;
 
          }
 
          public function current() {
 
              return $this->line;
 
          }
 
          public function key() {
 
              return $this->i;
 
          }
 
          public function next() {
 
              if (false !== $this->line) {
 
                  $this->line = fgets($this->fileHandle);
 
                  $this->i++;
 
              }
 
          }
 
          public function __destruct() {
 
              fclose($this->fileHandle);
 
          }
 
      }
 
  ?>
 
  这种灵活性也付出了代价:生成器是前向迭代器,不能在迭代启动之后往回倒. 这意味着同一个迭代器不能反复多次迭代: 生成器需要需要重新构建调用,或者通过clone关键字克隆.
 

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读