生成器返回值

PHP7支持通过Generator::getReturn获取生成器方法return的返回值。

PHP5中我们约定使用Generator最后一次yield值作为返回值。

  1. <?php
  2. final class AsyncTask
  3. {
  4. public function begin()
  5. {
  6. return $this->next();
  7. }
  8. // 添加return传递每一次迭代的结果,直到向上传递到begin
  9. public function next($result = null)
  10. {
  11. $value = $this->gen->send($result);
  12. if ($this->gen->valid()) {
  13. return $this->next($value);
  14. } else {
  15. return $result;
  16. }
  17. }
  18. }
  1. <?php
  2. function newGen()
  3. {
  4. $r1 = (yield 1);
  5. $r2 = (yield 2);
  6. echo $r1, $r2;
  7. yield 3;
  8. }
  9. $task = new AsyncTask(newGen());
  10. $r = $task->begin(); // output: 12
  11. echo $r; // output: 3