资讯专栏INFORMATION COLUMN

PHP|PHP实践-生成器

xialong / 1272人阅读

摘要:与标准的迭代器不同,生成器不要求类实现接口,从而减轻了类的负担。生成器不能完成所有迭代器的操作。如果需要更多功能,例如在数据集中执行后腿,快进或查找操作,最好自己编写类,实现接口,或者使用标准库中某个原生的迭代器参考

PHP生成器是5.5.0引入的功能。

生成器实际上就是简单的迭代器。

与标准的PHP迭代器不同,生成器不要求类实现Iterator接口,从而减轻了类的负担。

生成器会根据需求计算产出迭代的值。而标准的PHP迭代器经常在内存中执行迭代操作,这要预先计算出数据集,性能较低。

如果使用特定的防护计算大量数据,可以使用生成器,即时计算并产出后续值,不占用内存。

生成器不能完成所有迭代器的操作。无法后退,快进,并且生成器是一次性的,无法对此迭代同一个生成器。

创建

生成器从不返回值,只是产出值。


调用生成器函数时,PHP会反悔一个属于Generator类的对象。这个对象是可以foreach迭代的。每次迭代,PHP要求这个实例计算并提供下一个要迭代的值。

每次产出一个值,生成器的内部状态都会停顿。向生成器请求下一个值时,内部状态才会恢复。这种停顿-恢复的状态会一直持续下去。


使用

上面的这个方法并没有善用内存,使用生成器只会为一个整数分配内存。


再举个例子:使用生成器处理CSV文件


这个例子中,生成器只会为CSV文件分配一行内存,而不是读入整个文件到内存。

如果需要更多功能,例如在数据集中执行后腿,快进或查找操作,最好自己编写类,实现Iterator接口(http://php.net/manual/class.iterator.php),或者使用PHP标准库中某个原生的迭代器(http://php.net/manual/spl.iterators.php)

参考:

Modern PHP

http://bit.ly/ircmaxwell

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/21649.html

相关文章

  • 记一次 Laravel 应用性能调优经历

    摘要:为了一探究竟,于是开启了这次应用性能调优之旅。使用即时编译器和都能轻轻松松的让你的应用程序在不用做任何修改的情况下,直接提高或者更高的性能。 这是一份事后的总结。在经历了调优过程踩的很多坑之后,我们最终完善并实施了初步的性能测试方案,通过真实的测试数据归纳出了 Laravel 开发过程中的一些实践技巧。 0x00 源起 最近有同事反馈 Laravel 写的应用程序响应有点慢、20几个并...

    warkiz 评论0 收藏0
  • Laravel入门及实践,快速上手ThinkSNS+二次开发

    摘要:在中,提示符可能是。框架使用来执行安装及管理依赖。为了能访问网页,要启动程序服务器。在大多数类系统中,包括,命令行提示符是符号。这两个操作分别对应于的和,即创建和读取。首个表单要在模板中编写表单,可以使用表单构造器。 【摘要】自从ThinkSNS+不使用ThinkPHP框架而使用Laravel框架之后,很多人都说技术门槛抬高了,其实你与TS+的距离仅仅只是学习一个新框架而已,所以,我们...

    glumes 评论0 收藏0
  • 聊聊加密那点事——PHP加密最佳实践

    摘要:所谓对称加密,就是加密和解密使用同一秘钥,这也是这种加密算法最显著的缺点之一。非对称加密算法由于对称加密在通信加密领域的缺陷,年和提出了非对称加密的概念。非对称加密,其主要缺点之一就是慢,适合加密少量数据。 1. 加密的目的 加密不同于密码,加密是一个动作或者过程,其目的就是将一段明文信息(人类或机器可以直接读懂的信息)变为一段看上去没有任何意义的字符,必须通过事先约定的解密规则才能将...

    lcodecorex 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<