Hi.
Nicht notwendig, da beide Interfaces von Traversable erben. Der Test auf dieses Interface reicht aus, um zu entscheiden, ob ein Objekt mit foreach iterierbar ist.
Es ist auch nicht hinreichend, auf {Iterator oder IteratorAggregate} zu prüfen, weil es natives PHP-Zeugs gibt, das iterierbar ist und Iterator(aggregate) nicht implementiert (wohl aber Traversable).
Das Traversable wurde ja gestern schon erwähnt, allerdings ist das theoretisch nicht in jedem Fall. Es stimmt schon, dass die beiden Interfaces Iterator und IteratorAggregate von Traversable erben, und Traversable für diesen Zweck der einfachen Prüfung vorgesehen ist, aber da es selbst keinerlei Mitglieder definiert, dürfte es für foreach schwer werden, ein Objekt zu iterieren, das allein von Traversable erbt. Praktisch stellt sich diese Frage allerdings nicht [...]
Es gibt in dem Fall mal keinen Unterschied zwischen Theorie und Praxis. Es ist der Zweck der Existenz des Interfaces Traversable, Auskunft darüber zu geben, ob ein Objekt 'traversierbar' ist. Deshalb ist das auch *die* Prüfung, die zu machen ist, wenn man eben dieses feststellen will.
Viele Grüße,
der Bademeister