Was ist ein PHP-Generator? 10 Minuten, um Ihnen anhand von Beispielen das Verständnis des PHP-Generators zu erleichtern

墨辰丷
Freigeben: 2023-03-30 13:58:01
Original
2903 Leute haben es durchsucht

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:

Was ist ein PHP-Generator? 10 Minuten, um Ihnen anhand von Beispielen das Verständnis des PHP-Generators zu erleichtern

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:

Was ist ein PHP-Generator? 10 Minuten, um Ihnen anhand von Beispielen das Verständnis des PHP-Generators zu erleichtern

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:

Was ist ein PHP-Generator? 10 Minuten, um Ihnen anhand von Beispielen das Verständnis des PHP-Generators zu erleichtern

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!