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:
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.
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
<?php function filegenerator($name) { $fileHandle = fopen($name, 'r'); 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(); ?>
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!