Bevor wir Generatoren erklären, stellen wir Iteratoren vor:
In PHP wird foreach normalerweise zum Durchlaufen von Arrays verwendet.
Was ist, wenn wir ein Objekt durchquerbar machen wollen?
PHP stellt uns die Iterator-Schnittstelle zur Verfügung, solange diese Schnittstelle implementiert ist, kann dieses Objekt über foreach iteriert werden.
Das Beispiel sieht wie folgt aus:
Wenn wir $it durch foreach durchlaufen, ruft sich PHP der Reihe nach auf:
rewind( ) zum Zurücksetzen auf Das erste Element
valid() prüft, ob die aktuelle Position gültig ist
current() gibt das aktuelle Element zurück
key() gibt den Schlüssel des zurück aktuelles Element
next() zeigt auf das nächste Element Der
-Generator ist eine neue Funktion, die in PHP 5.5 eingeführt wurde, aber derzeit scheinen nur wenige Leute sie zu verwenden.
Was ist ein PHP-Generator?
Das Folgende ist die Erklärung von Generatoren aus der offiziellen PHP-Dokumentation:
Generatoren bieten eine einfachere Möglichkeit, einfache Objektiteration zu implementieren, verglichen mit der Definition von Klassen, um den Iterator-Interface-Ansatz und die Leistung zu implementieren Overhead und Komplexität werden deutlich reduziert.
Mit Generatoren können Sie Code in einen foreach-Block schreiben, um einen Datensatz zu durchlaufen, ohne ein Array im Speicher zu erstellen, was Ihre Speichergrenze erreichen oder erhebliche Verarbeitungszeit in Anspruch nehmen würde. Stattdessen können Sie eine Generatorfunktion schreiben, genau wie eine normale benutzerdefinierte Funktion, und statt einer normalen Funktion, die nur einmal zurückgibt, kann der Generator so oft nachgeben, wie nötig, um die Werte zu generieren, über die iteriert werden muss.
Um die Vorteile des Generators widerzuspiegeln, definieren wir unten eine Funktion zum Vergleich:
Da ein so großes Array zur Iteration im Speicher erstellt wird, Dann meldet PHP direkt, dass das Speicherlimit eines einzelnen Prozesses überschritten wurde.
Ändern wir es in einen Generator:
Sie können sehen, dass wir func1() aufrufen und ein Generatorobjekt zurückgeben, das für jede Iteration verwendet werden kann. Bei jeder Iteration fordert PHP die Generator-Instanz auf, den nächsten zu iterierenden Wert zu berechnen und bereitzustellen. Die Eleganz von Generatoren besteht darin, dass der interne Zustand des Generators jedes Mal angehalten wird, wenn der nächste Wert vom Generator angefordert wird. Der interne Zustand des Generators wechselt zwischen Pause und Fortsetzen, bis das Ende der Funktionsdefinition erreicht ist oder eine leere Return-Anweisung gefunden wird.
Das obige ist der detaillierte Inhalt vonWas ist ein PHP-Generator? 10 Minuten, um Ihnen anhand von Beispielen das Verständnis des PHP-Generators zu erleichtern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!