dedlfix: Warum muss ich einen CallbackFilterIterator rewind()-en bevor ich ihn nutzen kann?

Beitrag lesen

problematische Seite

Tach!

Wieso muss ich den CallbackFilterGenerator manuell rewinden?

Du meinst CallbackFilterIterator. Ein Iterator ist ein allgemeines Interface. Das gab es schon lange bevor Generatoren ins Spiel kamen. Es ist auch nicht erforderlich, dass ein Iterator intern einen Generator verwendet. Sattdessen kann er die Methoden auch herkömmlich implementieren. Und dazu gehört dann auch, einen definierten Anfangszustand herstellen zu können, was man mit rewind() macht.

Das macht den Gebrauch ziemlich lästig.

Bevor es foreach gab, hat man Arrays mit while durchlaufen müssen. Es gibt einen internen Array-Pointer/-Cursor, den man mit next() oder auch each() zum nächsten Element befördert hat. Den hat man auch zurücksetzen/initialisieren müssen, wozu es reset() gibt.

Es ist auch nicht intuitiv, vor allem, weil man Generatoren auch gar nicht rewinden kann. Ist das ein PHP Bug?

Ein Generator ist die Vereinfachung eines Iterators. Ein Generator ist eine einzelne Funktion. Er hat damit einen definierten Startpunkt. Die Funktion kann das, was ein Iterator im rewind() ausführen muss, am Anfang ausführen, bevor das erste yield aufgerufen wird. Deshalb ist da kein separates "Rewinden" notwendig.

dedlfix.