Heim > Backend-Entwicklung > PHP-Tutorial > PHP-Generatorklasse

PHP-Generatorklasse

WBOY
Freigeben: 2023-08-29 11:14:02
nach vorne
589 Leute haben es durchsucht

PHP-Generatorklasse

Einführung

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.

Syntax

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
}
Nach dem Login kopieren

Methoden

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.

Generator-Beispiel

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 . " ";
}
?>
Nach dem Login kopieren

Ausgabe

Das obige Programm zeigt die folgende Ausgabe

1 4 9 16 25
Nach dem Login kopieren

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.

Beispiel

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();
}
?>
Nach dem Login kopieren

Ausgabe

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
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonPHP-Generatorklasse. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:tutorialspoint.com
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