Following up on two previous posts about iterators, Fabien Potencier is back with one more quick shot on iterator aggregation - a look what using iterator versus iteratoraggregate.
If you have ever used iterators in your code, you have probably implemented the Iterator interface. Objects of a class that implements Iterator can be iterated over with the foreach loop. [...] The IteratorAggregate interface is quite similar [to Iterator] (both interfaces implement Traversable) but creates an external Iterator. But when the iterator is based on an array, creating an external Iterator for this array gives you a more concise and more readable code.
His example code shows how, in implementing and IteratorAggregate, you can grab the instance of the Iterator even if it's based on an array.