[摘要]本篇文章给大家带来的内容是关于PHP中迭代器以及生成器的分析以及优缺点的介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。一.迭代器分析:想一下,如果把集合对象和对集合对象的操作放...
本篇文章给大家带来的内容是关于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迭代器经常在内存中执行迭代操作者要预先计算出数据集性能低下;如果要使用特定的的方式对计算大量数据,对性能的影响更甚。此时我们可以使用生成器,即时计算产出后续值不占用宝贵的内存资源。
优点:占用内存少对,性能好。每次产出一个值之后,生成器的内部状态都会停顿;当生成器请求下一个值时,内部状态又会恢复。生成器的内部一直在停顿和恢复之间切换,直到循环完成或停顿位置