Das Durchlaufen großer Datenmengen mithilfe von Schleifenstrukturen (z. B. foreach) erfordert viel Speicher und erhebliche Verarbeitungszeit. Verwenden Sie Generatoren, um einen Datensatz ohne diesen Mehraufwand zu durchlaufen. Generatorfunktionen sind wie gewöhnliche Funktionen. Anstelle einer Return-Anweisung in der Funktion wird der Generator jedoch wiederholt mit dem Schlüsselwort yield ausgeführt, um die zu iterierenden Werte bereitzustellen.
Das Schlüsselwort yield ist der Kern des Generatormechanismus. Obwohl seine Verwendung der Rückgabe ähnelt, stoppt es die Funktionsausführung nicht. Es stellt den nächsten Wert der Iteration bereit und unterbricht die Ausführung der Funktion.
Generator implements Iterator { /* Methods */ public current ( void ) : mixed public getReturn ( void ) : mixed public key ( void ) : mixed public next ( void ) : void public rewind ( void ) : void public send ( mixed $value ) : mixed public throw ( Throwable $exception ) : mixed public valid ( void ) : bool public __wakeup ( void ) : void }
public Generator::current ( void ) − mix — Den generierten Wert abrufen
public Generator::getReturn ( void ): mix — Den Rückgabewert des Generators abrufen
public Generator::key ( void ) − mix – Holen Sie sich den Schlüssel des generierten Werts.
p>public Generator::next ( void ) − void — Setzt die Ausführung des Generators fort. Der Effekt ist der gleiche wie beim Aufruf von Generator::send() mit NULL als Argument.
public Generator::rewind ( void ) − void – Spulen Sie den Iterator zurück. Dadurch wird eine Ausnahme ausgelöst, wenn die Iteration bereits begonnen hat.
public Generator::send (mixed $value): mix – Sendet den angegebenen Wert als Ergebnis des aktuellen Ertragsausdrucks an den Generator und stellt den Generator wieder her.
public Generator::throw ( Throwable $Exception ) − mix – Wirft eine Ausnahme in den Generator und setzt die Ausführung des Generators fort.
public Generator::valid ( void ) − bool — Prüft, ob der Iterator geschlossen wurde
public Generator::__wakeup ( void ) − void — Löst eine Ausnahme aus, da der Generator nicht serialisiert werden kann.
Die Generator-Klasse implementiert die Iterator-Schnittstelle. Generatorobjekte können nicht über new instanziiert werden. Jede benutzerdefinierte Funktion mit dem Schlüsselwort yield erstellt ein Objekt der Generatorklasse.
Da der Generator die Iterator-Schnittstelle implementiert, kann jede Schleife zum Durchlaufen der generierten Werte verwendet werden.
Live-Demonstration
<?php function squaregenerator(){ for ($i=1; $i<=5; $i++){ yield $i*$i; } } $gen=squaregenerator(); foreach ($gen as $val){ echo $val . " "; } ?>
Das obige Programm zeigt die folgende Ausgabe
1 4 9 16 25
Das folgende Beispiel verwendet die Methoden current() und next() der Generatorklasse, um über die generierten Werte zu iterieren. Verwenden Sie die Methode valid(), um Schleifenbedingungen zu überprüfen.
Live-Demonstration
<?php function squaregenerator(){ for ($i=1; $i<=5; $i++){ yield $i*$i; } } $gen=squaregenerator(); while ( $gen->valid() ){ echo "key: " . $gen->key(). " value: ". $gen->current() . ""; $gen->next(); } ?>
Das obige Programm zeigt die folgende Ausgabe
key: 0 value: 1 key: 1 value: 4 key: 2 value: 9 key: 3 value: 16 key: 4 value: 25
Das obige ist der detaillierte Inhalt vonPHP-Generatorklasse. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!