官方示例代码一
<?php function xrange($start, $limit, $step = 1) { if ($start < $limit) { if ($step <= 0) { throw new LogicException('Step must be +ve'); } for ($i = $start; $i <= $limit; $i += $step) { yield $i; } } else { if ($step >= 0) { throw new LogicException('Step must be -ve'); } for ($i = $start; $i >= $limit; $i += $step) { yield $i; } } } /* * 注意下面range()和xrange()输出的结果是一样的。 */ echo 'Single digit odd numbers from range(): '; foreach (range(1, 9, 2) as $number) { echo "$number "; } echo " "; echo 'Single digit odd numbers from xrange(): '; foreach (xrange(1, 9, 2) as $number) { echo "$number "; } ?>
官方示例代码二
1 <?php 2 function gen_one_to_three() { 3 for ($i = 1; $i <= 3; $i++) { 4 //注意变量$i的值在不同的yield之间是保持传递的。 5 yield $i; 6 } 7 } 8 9 $generator = gen_one_to_three(); 10 foreach ($generator as $value) { 11 echo "$value "; 12 } 13 ?>
$generator = gen_one_to_three();是不执行gen_one_to_three()方法的,因为有yield关键字,只有在foreach迭代的时间才执行。