Heim  >  Artikel  >  Backend-Entwicklung  >  PHP-Generatorklasse

PHP-Generatorklasse

WBOY
WBOYnach vorne
2023-08-29 11:13:07572Durchsuche

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
}

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 . " ";
}
?>

Ausgabe

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.

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();
}
?>

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

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

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen