當一個生成器函數被第一次調用,會返回一個內部Generator類的對象. 這個對像以和前台迭代器對象幾乎同樣的方式實現了Iterator 接口。
Generator 類別中的大部分方法和Iterator 介面中的方法有著相同的語意, 但是生成器物件還有一個額外的方法: send().
CautionGenerator 物件不能透過new實例化
Generator class<?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()當進行迭代的時候Generator::send() 允許值注入到生成器方法中. 注入的值會從yield語句中返回,然後在任何使用生成器方法的變數中使用.Example #2 Using Generator::send() to inject values
<?php function printer() { while (true) { $string = yield; echo $string; } } $printer = printer(); $printer->send('Hello world!'); ?>以上例程會輸出:
Hello world!