Wenn eine Generatorfunktion zum ersten Mal aufgerufen wird, gibt sie ein Objekt der internen Generator-Klasse zurück. Dieses Objekt implementiert die Iterator-Schnittstelle fast auf die gleiche Weise wie das Front-Iterator-Objekt.
Die meisten Methoden in der Generator-Klasse haben die gleiche Semantik wie die Methoden in der Iterator-Schnittstelle, aber das Generatorobjekt verfügt über eine zusätzliche Methode: send().
AchtungGenerator-Objekte können keine neuen übergeben Instanziierung
Beispiel #1 Die Generator-Klasse
<?php class Generator implements Iterator { public function rewind(); //Rewinds the iterator. 如果迭代已经开始,会抛出一个异常。 public function valid(); // 如果迭代关闭返回false,否则返回true. public function current(); // Returns the yielded value. public function key(); // Returns the yielded key. public function next(); // Resumes execution of the generator. public function send($value); // 发送给定值到生成器,作为yield表达式的结果并继续执行生成器. } ?>
Generator::send()
Beim Iterieren ermöglicht Generator::send() das Einfügen von Werten into In der Generator-Methode werden die injizierten Werte von der yield-Anweisung zurückgegeben und dann in beliebigen Variablen mithilfe der Generator-Methode verwendet.
Beispiel Nr. 2: Verwendung von Generator::send() zum Injizieren von Werten
<?php function printer() { while (true) { $string = yield; echo $string; } } $printer = printer(); $printer->send('Hello world!'); ?>
Die obige Routine gibt Folgendes aus:
Hello world!