Einige Anmerkungen zu PHP Traversables
Iteration mit Funktionen
Traversables können mit foreach
iteriert werden, jedoch nicht im allgemeinen mit Array-Iterations Funktionen wie reset()
und next()
.
Iterator
Objekte können auch auch mit folgenden Funktionen verwendet werden:
- current()
- next()
- prev()
- reset()
- end()
Achtung: Es ist zwar möglich, allen diesen Funktionen IteratorAggregate Objekte zu übergeben (wie auch jedes andere Objekt), die Iterator-Funktionalität wird dabei aber nicht genutzt, sondern es wird über die Attribute des Objekts iteriert.
Das selbe gilt für Iterator Objekte mit each()
! Dieses sollte generell nicht für Objekte benutzt werden, da hilft weder ArrayAccess noch Iterator. Es funktioniert im allgemeinen nie wie erwünscht.
Überprüfung von unbekannter Variable auf Iterierbarkeit mit foreach
$a implements Traversable || is_array($a);
- Traversable ist vor Iterator zu bevorzugen da auch IteratorAggregate und andere interne Iteratoren damit erkannt werden.
- Arrays sind keine Traversables, da keine Objekte
Will man allerdings volle Flexibilität genügt:
is_object($a) || is_array($a)
- PHP kann beliebige Objekte als Iterator benutzen und iteriert dabei über die öffentlichen Attribute!