加入收藏 | 设为首页 | 会员中心 | 我要投稿 银川站长网 (https://www.0951zz.com/)- 云通信、基础存储、云上网络、机器学习、视觉智能!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

如何进行 PHP 的生成器与迭代器的对比

发布时间:2023-11-02 11:25:15 所属栏目:PHP教程 来源:
导读:这篇文章给大家分享的是“PHP生成器和迭代器对象的比较是怎样的?”,对大家学习和理解有一定的参考价值和帮助,有这方面学习需要的朋友,接下来就跟随小编一起学习一下吧。生成器最大的优势就是简单,和实

这篇文章给大家分享的是“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关键字克隆。

(编辑:银川站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章