I was perusing the manual today and noticed the various iterators. To me, it seems like they are all somewhat pointless; I don\'t see a reason to use them unless you prefer
One simple example: Implementing an object that can be accessed and traversed like an array. SimpleXML is a nice example of the powerful behavior that can be achieved with this.
To accomplish this you could implement the Iterator interface which defines the methods public current(), public key(), public next(), public rewind() and public valid().
Or you can simply implement the alternative IteratorAggregate interface which defines one method public getIterator() which simply returns an Iterator for the internal data you want to expose.
Be sure to check out the examples of the above Interfaces and you'll see the advantage.