这两个都是系统的扩展类。
首先看下他两的实质:
从上图可以得知,两者同样继承了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);
导致代码可能出现意外。