php生成器

生成品总览

生成器语法

官方示例代码一

 

<?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 "\n";

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\n";
12 }
13 ?>
$generator = gen_one_to_three();是不执行gen_one_to_three()方法的,因为有yield关键字,只有在foreach迭代的时间才执行。

 

posted @ 2018-09-08 00:40  wahgon  阅读(212)  评论(0编辑  收藏  举报