3.5PHP语言的生成器(Generator)

在很多方面,生成器(Generator)与迭代器类似,但生成器提供了一种更容易的方法来实现简单的对象迭代,相比较定义类实现 Iterator 接口的方式,性能开销和复杂性大大降低。

生成器定义时像函数,运行时像迭代器。

生成器与普通函数的区别在于:生成器需要使用 yield 关键字返回执行结果,而普通函数使用 return 关键字返回执行结果。该语句在循环场景中使用更为典型。

调用生成器函数时会返回一个内部的 Generator 类的对象。 Generator 类实现了 Iterator 接口,基本上和迭代器一样, 它提供的方法可以操控生成器的状态,包括发送值、返回值。

<?php
function xrange($start, $limit, $step = 1) {
    if ($start <= $limit) {
        if ($step <= 0) {
            throw new LogicException('Step must be positive');
        }

        for ($i = $start; $i <= $limit; $i += $step) {
            yield $i;
        }
    } else {
        if ($step >= 0) {
            throw new LogicException('Step must be negative');
        }

        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 ";
}
?>
//输出
Single digit odd numbers from range():  1 3 5 7 9 
Single digit odd numbers from xrange(): 1 3 5 7 9 

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/back/php/5326.html

发表评论

登录后才能评论