PHP生成器和迭代器对象的比较是怎样的?
Admin 2022-10-11 群英技术资讯 534 次浏览
生成器最大的优势就是简单,和实现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关键字克隆.
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
冒泡排序就如其名字一样,轻的气泡在上面,重的在下面。原理:对要排序的一列数作两两交换,最小的在最左边,每次都能在剩下的数中找出最小的数,将冒出来的这些数组成个有序的排列,剩下的无序排列,有序的都比无序的小。
(支持PHP4,PHP5)如果在一个函数中调用 return 语句,将立即结束此函数的执行并将它的参数作为函数的值返回。 return 也会终止 eval() 语句或者脚本文件的执行。...
在thinkphp中,T方法用于生成模板文件名,语法“T([资源://][模块@][主题/][控制器/]操作,[视图分层])”;该方法的返回值是一个完整的模板文件名,可以直接用于display和fetch方法进行渲染输出。
在php中,有好几种加密方式,其中就有DES、ECB和CBC这三种加密,今天小编就带大家了解一下这三种加密方式的区别,有需要的可以参考一下。
php数组合并的方法:1、array_merge数字key被归为0,包含相同的key,则保留第二个key值;2、array_merge_recursive数字key为0,包含相同key时,合成数组;3、array_combine创建新数组。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008