background image

 

  生成器最基本的思想也是一个函数,这个函数的返回值是依次输出,而不是只返回
一个单独的值。或者,换句话说,生成器使你更方便的实现了迭代器接口。下面通过实现
一个 xrange 函数来简单说明:
代码如下:
 
<?php

function

 xrange(

$start

$end

$step

 = 1) {

    

for

 (

$i

 = 

$start

$i

 <= 

$end

$i

 += 

$step

) {

        

yield 

$i

;

    

}

}

foreach

 (xrange(1, 1000000) 

as

 

$num

) {

    echo

 

$num

, "\n";

}
上面这个 xrange()函数提供了和 PHP 的内建函数 range()一样的功能。但是不同的是
range()函数返回的是一个包含属组值从 1 到 100 万的数组(注:请查看手册)。而
xrange()函数返回的是依次输出这些值的一个迭代器,而且并不会真正以数组形式计
算。
  这种方法的优点是显而易见的。它可以让你在处理大数据集合的时候不用一次性的加
载到内存中。甚至你可以处理无限大的数据流。