Heim  >  Artikel  >  Backend-Entwicklung  >  Vergleich von PHP-Generatoren und Iteratorobjekten

Vergleich von PHP-Generatoren und Iteratorobjekten

王林
王林nach vorne
2023-09-16 17:41:02958Durchsuche

Vergleich von PHP-Generatoren und Iteratorobjekten

Einführung

Wenn eine Generatorfunktion aufgerufen wird, wird intern ein neues Generatorklassenobjekt zurückgegeben. Es implementiert die Iterator-Schnittstelle. Die Iterator-Schnittstelle definiert die folgenden abstrakten Methoden:

  • Iterator::current – Gibt das aktuelle Element zurück.
  • Iterator::key – Gibt den Schlüssel des aktuellen Elements zurück.
  • Iterator::next – Geht vorwärts zu das nächste Element
  • Iterator: :rewind – Zurückspulen des Iterators zum ersten Element
  • Iterator::valid – Überprüfen Sie, ob die aktuelle Position gültig ist

Der Generator fungiert als Only-Forward-Iterator-Objekt Und stellt aufrufbare Methoden zur Manipulation des Generatorstatus bereit, einschließlich des Sendens von Werten an den Generator und der Rückgabe von Werten vom Generator.

Generatoren als Interakteure

Im folgenden Beispiel generiert die Generatorfunktion Zeilen in der Datei des Generatorobjekts, die mithilfe einer oreach-Schleife iteriert werden können. Es können auch Iteratormethoden wie current() und next() aufgerufen werden. Da der Generator jedoch ein Nur-Vorwärts-Iterator ist, löst der Aufruf der Methode rewind() eine Ausnahme aus

Example

<?php
function filegenerator($name) {
   $fileHandle = fopen($name, &#39;r&#39;);
   while ($line = fgets($fileHandle)) {
      yield $line;
   }
   fclose($fileHandle);
}
$name="test.txt";
$file=filegenerator($name);
foreach ($file as $line)
echo $line;
$file->rewind();
echo $file->current();
$file->next();
echo $file->current();
?>

Output

Nach der Iteration über die Dateizeilen wird ein schwerwiegender Fehler wie folgt angezeigt:

PHP User Defined Functions
PHP Function Arguments
PHP Variable Functions
PHP Internal (Built-in) Functions
PHP Anonymous functions
PHP Arrow Functions
PHP Fatal error: Uncaught Exception: Cannot rewind a generator that was already run

Das obige ist der detaillierte Inhalt vonVergleich von PHP-Generatoren und Iteratorobjekten. 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