首页 > php教程 > 正文

PHP中迭代器以及生成器的分析以及优缺点的介绍

原创 2018-08-11 16:57:56 0 25
赞助会员专享特权
本篇文章给大家带来的内容是关于PHP中迭代器以及生成器的分析以及优缺点的介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

一.迭代器

分析:想一下,如果把集合对象和对集合对象的操作放在一起,当我们想换一种方式遍历集合对象中元素时,就需要修改集合对象了,违背“单一职责原则”,而迭代器模式将数据结构和数据结构的算法分离开,两者可独立发展。

优点:

1.支持多种遍历方式。比如有序列表,我们根据需要提供正序遍历、倒序遍历两种迭代器。用户只需要得到我们的迭代器,就可以对集合执行遍历操作

2.简化了聚合类。由于引入了迭代器,原有的集合对象不需要自行遍历集合元素了

3.增加新的聚合类和迭代器类很方便,两个维度上可各自独立变化

4.为不同的集合结构提供一个统一的接口,从而支持同样的算法在不同的集合结构上操作

缺点:

1.迭代器模式将存储数据和遍历数据的职责分离增加新的集合对象时需要增加对应的迭代器类,类的个数成对增加,在一定程度上增加系统复杂度

具体接口:

Iterator extends Traversable {
/* 方法 */
abstract public mixed current ( void )
abstract public scalar key ( void )
abstract public void next ( void )
abstract public void rewind ( void )
abstract public bool valid ( void )
}

二.生成器

PHP生成器(generator)是PHP5.5.0引入的功能,与标准的PHP迭代器不同,PHP生成器不要求类实现Iterator接口,从而减轻了类的负担,生成器会根据需求计算并产出要迭代的值,这对性能有重大的影响试想一下假如标准的PHP迭代器经常在内存中执行迭代操作者要预先计算出数据集性能低下;如果要使用特定的的方式对计算大量数据,对性能的影响更甚。此时我们可以使用生成器,即时计算产出后续值不占用宝贵的内存资源。

优点:占用内存少对,性能好。每次产出一个值之后,生成器的内部状态都会停顿;当生成器请求下一个值时,内部状态又会恢复。生成器的内部一直在停顿和恢复之间切换,直到循环完成或停顿位置

缺点:

1.PHP生成器不能满足所有迭代器的需求,因为如果不查询,生成器永远不知道下一个要迭代的值是什么,在生成器中无法后退或前进。

2.生成器还是一次性的,无法多次迭代同一个生成器,不过,如果需要,可以重建或克隆生成器。

创建生成器:

1.因为生成器就是PHP函数,生成器就是在函数中使用yield关键字。与普通的PHP函数不同的是,生产器从不返回值,只产出值。

<?php
function myGenerator(){
    yield 'a';
    yield 'b';
    yield 'c';
}

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

<?php
function makeRange($length){
    for($i = 0; $i<$length; $i++){
        yield $i;
    }
}

foreach(makeRange(1000000) as $i){
    echo $i,PHP_EOL;
}

如上所示:当$length 很大时(上百万),而且你同时没有使用生成器的话,那么就要预先为一个由一百万上一千五个整数组成的数组分配内存。而PHP生成器能实现相同的操作,不过一次只会为一个整数分配内存

相关推荐:

php使用位运算实现整数的加减乘除并测试(代码示例)

PHP和html表单之间实现简单交互的代码

以上就是PHP中迭代器以及生成器的分析以及优缺点的介绍的详细内容,更多请关注php中文网其它相关文章!

  • 相关标签:PHP 迭代器
  • 本文原创发布php中文网 ,转载请注明出处,感谢您的尊重!
  • 相关文章


  • PHP如何安装和配置?
  • php 和 python 语法(部分)上的区别
  • PHP 随机数 C扩展随机数
  • PHP查询附近的人及其距离的实现方法_php技巧
  • 网友评论

    文明上网理性发言,请遵守 新闻评论服务协议

    我要评论
    独孤九贱(4)_PHP视频教程

    独孤九贱(4)_PHP视频教程

    江湖传言:PHP是世界上最好的编程语言。真的是这样吗?这个梗究竟是从哪来的?学会本课程,你就会明白了。 PHP中文网出品的PHP入门系统教学视频,完全从初学者的角度出发,绝不玩虚的,一切以实用、有用...

    独孤九贱(5)_ThinkPHP5视频教程

    独孤九贱(5)_ThinkPHP5视频教程

    ThinkPHP是国内最流行的中文PHP开发框架,也是您Web项目的最佳选择。《php.cn独孤九贱(5)-ThinkPHP5视频教程》课程以ThinkPHP5最新版本为例,从最基本的框架常识开始,将...

    独孤九贱(1)_HTML5视频教程

    独孤九贱(1)_HTML5视频教程

    《php.cn原创html5视频教程》课程特色:php中文网原创幽默段子系列课程,以恶搞,段子为主题风格的php视频教程!轻松的教学风格,简短的教学模式,让同学们在不知不觉中,学会了HTML知识。 ...

    ThinkPHP5实战之[教学管理系统]

    ThinkPHP5实战之[教学管理系统]

    本套教程,以一个真实的学校教学管理系统为案例,手把手教会您如何在一张白纸上,从零开始,一步一步的用ThinkPHP5框架快速开发出一个商业项目。

    PHP入门视频教程之一周学会PHP

    PHP入门视频教程之一周学会PHP

    所有计算机语言的学习都要从基础开始,《PHP入门视频教程之一周学会PHP》不仅是PHP的基础部分更主要的是PHP语言的核心技术,是学习PHP必须掌握的内容,任何PHP项目的实现都离不开这部分的内容,通...

    相关视频教程

  • javascript初级视频教程 javascript初级视频教程
  • jquery 基础视频教程 jquery 基础视频教程
  • javascript三级联动视频教程 javascript三级联动视频教程
  • 独孤九贱(3)_JavaScript视频教程 独孤九贱(3)_JavaScript视频教程
  • 独孤九贱(6)_jQuery视频教程 独孤九贱(6)_jQuery视频教程
  • 相关视频章节