Analyse von Iteratoren und Generatoren in PHP und Einführung in deren Vor- und Nachteile

不言
Freigeben: 2023-04-03 18:26:02
Original
2626 Leute haben es durchsucht

Was dieser Artikel Ihnen bringt, ist die Analyse und Einführung der Vor- und Nachteile von Iteratoren und Generatoren. Ich hoffe, dass er einen gewissen Referenzwert hat Dir helfen.

1. Iterator

Analyse: Denken Sie darüber nach, ob Sie das Sammlungsobjekt und die Operationen darauf platzieren Sammlungsobjekt: Wenn wir die Elemente im Sammlungsobjekt auf andere Weise durchlaufen möchten, müssen wir das Sammlungsobjekt ändern, was gegen das „Prinzip der Einzelverantwortung“ verstößt, und das Iteratormuster trennt die Datenstruktur und den Algorithmus der Daten Struktur, und die beiden können unabhängig voneinander entwickelt werden.

Vorteile:

1. Unterstützt mehrere Traversierungsmethoden. Beispielsweise stellen wir in einer geordneten Liste je nach Bedarf zwei Iteratoren für die Durchquerung in Vorwärtsrichtung und die Durchquerung in umgekehrter Reihenfolge bereit. Benutzer müssen nur unseren Iterator dazu bringen, Durchlaufoperationen für die Sammlung durchzuführen

2. Vereinfachte Aggregatklassen. Aufgrund der Einführung von Iteratoren muss das ursprüngliche Sammlungsobjekt die Sammlungselemente nicht selbst durchlaufen

3 Es ist sehr praktisch, neue Aggregationsklassen und Iteratorklassen hinzuzufügen, und die beiden Dimensionen können unabhängig voneinander geändert werden

4. Stellen Sie eine einheitliche Schnittstelle für verschiedene Sammlungsstrukturen bereit und unterstützen Sie so den gleichen Algorithmus für die Arbeit mit verschiedenen Sammlungsstrukturen

Nachteile:

1. Iteration Das Iteratormuster trennt die Verantwortlichkeiten für das Speichern von Daten und das Durchlaufen von Daten. Wenn Sie ein neues Sammlungsobjekt hinzufügen, erhöht sich die Anzahl der Klassen paarweise, was die Systemkomplexität bis zu einem gewissen Grad erhöht

Spezifische Schnittstelle:

Iterator extends Traversable {
/* 方法 */
abstract public mixed current ( void )
abstract public scalar key ( void )
abstract public void next ( void )
abstract public void rewind ( void )
abstract public bool valid ( void )
}
Nach dem Login kopieren

2. Generator

PHP-Generator (Generator) ist eine Funktion, die in PHP5.5.0 eingeführt wurde, im Gegensatz zu Standard-PHP-Iteratoren nicht require Die Klasse implementiert die Iterator-Schnittstelle, wodurch die Belastung der Klasse verringert wird. Der Generator berechnet und gibt die zu iterierenden Werte entsprechend den Anforderungen aus. Stellen Sie sich vor, dass der Standard-PHP-Iterator häufig ausgeführt wird Iterationsoperationen im Speicher haben eine geringe Leistung; wenn eine bestimmte Methode zur Berechnung einer großen Datenmenge verwendet wird, ist die Auswirkung auf die Leistung noch größer. Zu diesem Zeitpunkt können wir den Generator verwenden, um nachfolgende Werte sofort zu berechnen und auszugeben, ohne wertvolle Speicherressourcen zu belegen.

Vorteile: Benötigt weniger Speicher und bietet eine gute Leistung. Der interne Zustand des Generators wird jedes Mal angehalten, wenn er einen Wert erzeugt; er wird wiederhergestellt, wenn der Generator den nächsten Wert anfordert. Die Interna des Generators wechseln so lange zwischen Pause und Fortsetzen, bis die Schleife abgeschlossen ist oder die Pausenposition erreicht ist.

Nachteile:

1 Der PHP-Generator kann nicht die Anforderungen aller Iteratoren erfüllen, da er nicht abgefragt wird, weiß der Generator nie, welcher Wert als nächstes durchlaufen werden soll, und es gibt keine Möglichkeit, im Generator vor- oder zurückzugehen.

2. Der Generator ist immer noch einmalig und derselbe Generator kann nicht mehrmals wiederholt werden. Der Generator kann jedoch bei Bedarf neu erstellt oder geklont werden.

Generator erstellen:

1 Da der Generator eine PHP-Funktion ist, verwendet der Generator das Schlüsselwort yield in der Funktion. Im Gegensatz zu gewöhnlichen PHP-Funktionen geben Produzenten niemals Werte zurück, sondern erzeugen nur Werte.

<?php
function myGenerator(){
    yield &#39;a&#39;;
    yield &#39;b&#39;;
    yield &#39;c&#39;;
}
Nach dem Login kopieren

2. Beim Aufruf der Generatorfunktion gibt PHP ein Objekt zurück, das zur Generator-Klasse gehört. Dieses Objekt kann mit der Funktion foreach() iteriert werden. Für jede Iteration fordert PHP die Generator-Instanz auf, den nächsten zu iterierenden Wert zu berechnen und bereitzustellen

<?php
function makeRange($length){
    for($i = 0; $i<$length; $i++){
        yield $i;
    }
}

foreach(makeRange(1000000) as $i){
    echo $i,PHP_EOL;
}
Nach dem Login kopieren

wie oben gezeigt: Wenn $length groß ist (Millionen) und Sie gleichzeitig keinen Generator verwenden Dann müssen Sie vorab Speicher für ein Array zuweisen, das aus einer Million bis eintausendfünf Ganzzahlen besteht. Der PHP-Generator kann die gleiche Operation ausführen, reserviert jedoch jeweils nur Speicher für eine Ganzzahl.

Verwandte Empfehlungen:

PHP verwendet Bitoperationen, um Addition, Subtraktion und Multiplikation zu implementieren und Division von ganzen Zahlen und Test (Codebeispiel)

Code für einfache Interaktion zwischen PHP und HTML-Formular

Das obige ist der detaillierte Inhalt vonAnalyse von Iteratoren und Generatoren in PHP und Einführung in deren Vor- und Nachteile. 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