Iterator && IteratorAggregate区别

这两个都是系统的扩展类。

首先看下他两的实质:

从上图可以得知,两者同样继承了Traversable类,两者是兄弟关系。

以下是这两个类的所处的层级:

iterable

  array

  Traversable

    Iterator

      Generator

    IteratorAggragate

两者的区别:第一次遇到iteratorAggragate,容易误认为是Iterator。实质不是iterator,而是聚合了Iterator。

为什么有了Iterator,还需要IteratorAggregate呢?

1、方便使用,继承Iterator类,可以实现遍历的过程,比较繁琐,好处是可控性高,如prev(),next(),rewind()等方法。而IteratorAggregate就是傻瓜似的,如下图

注意:generator是特殊的iterator,遍历一次后,不能rewindable,即指针不能回到开头。若函数的参数

function test(iterator $obj);

导致代码可能出现意外。

原文地址:https://www.cnblogs.com/huachengai/p/13255567.html