on an abstract class, it would work. Concrete classes could then choose between Iterator and IteratorAggregate (this is why FormInterface extends Traversable only in Symfony, to give choice to implementors, as all it really needs is enforcing Traversable)