PHP中的发电机是什么

  介绍

这篇文章主要介绍了PHP中的发电机是什么,具有一定借鉴价值,需要的朋友可以参考下。下面就和我一起来看看吧。

何为发电机

从PHP 5.5开始,PHP加入了一个新的特性,那就是<代码>发电机> 生成器>

xrange

在PHP中,我们都知道,有一个函数叫做<代码> ,用来生成一个等差数列的数组,然后我们可以用这个数组进行<代码> foreach> foreach (范围(1,100,2),as  num美元),{   ,,,echo  num 美元;只PHP_EOL;   }

这一段代码就会输出首项为1,末项为100公差为2的等差数列。它的执行顺序是这样的。首先,<代码>范围(100 2)会生成一个数组,里面存了上面那样的一个等差数列,之后在<代码> foreach>

那么,这样就会出现一个问题,如果我要生成100多万个数字呢?那我们就要占用上百兆内存。虽然现在内存很便宜,但是我们也不能这么浪费内存嘛。那么这时,我们的生成器就可以排上用场了。考虑下面的代码。

function  xrange()美元开始,限制美元,美元step =, 1), {   ,,,while  (start 美元;& lt;=,限制美元),{   ,,,,,,,油品收率开始美元;   ,,,,,,,start 美元;+=,一步美元;   ,,,}   }      foreach  (xrange(100年,1,,2),as  num美元),{   ,,,echo  num 美元;只PHP_EOL;   }

这段代码所的出来的结果,和前面的那段代码一模一样,但是,它内部的原理是天翻地覆了。

我们刚才说了,前面的代码,<代码> 范围会生成一个数组,然后<代码> foreach> xrange 函数,在函数中,我们用了一个关键字<代码> 。我们都知道定义一个函数,希望它返回一个值得时候,用<代码> 返回来返回。那么这个<代码> 呢,也可以返回一个值,但是,它和<代码> 返回是截然不同的。

使用<代码> 收益率关键字,可以让函数在运行的时候,中断,同时会保存整个函数的上下文,返回一个<代码>发电机> 下> 收益率为止,如果后面没有再出现<代码>产量>

这样,我们上面的函数调用可以等价地写成这样。

nums 美元;=,xrange(100年,1,,2);   while  (num→美元有效()),{   ,,,echo  num→美元当前的(),只“\ n";   ,,,num→美元next ();   }

在这里,num美元<代码> 是一个<代码>发电机> 有效的,<代码>当前和<代码> 。当我们函数执行完了,后面没有<代码> 中收益率断了,那么我们在<代码> xrange 函数就执行完了,那么<代码> 有效方法就会变成<代码>假> 呢,会返回当前<代码> 后收益率面的值,这是,生成器的函数会中断。那么在调用下 <代码>方法之后,函数会继续执行,直到下一个<代码>产量>

好了,到这里,我们看到了通过<代码>产量> 其收益率实也可以这么写<代码>美元ret=产量;> 发电机::发送(美元值)来使用,例如。

function 和()   {   ,,,ret 美元;=,收益率;   ,,,echo  ret 美元;只PHP_EOL;   }      $ sum =, sum ();   美元金额→发送(& # 39;小姐:am 得到外面强生# 39;);

这样,程序就会打印出<代码> 发送方法传进去的字符串了。在<代码> 的收益率两边可以同时有调用。

function  xrange(开始,美元,美元限制,,step 美元;=,1),{   ,,,while  (start 美元;& lt;=,限制美元),{   ,,,,,,,ret 美元;=,油品收率开始美元;   ,,,,,,,start 美元;+=,一步美元;   ,,,,,,,echo  ret 美元;只PHP_EOL;   ,,,}   }      nums 美元;=,xrange(1), 100年,2);   while  (num→美元有效()),{   ,,,echo  num→美元当前的(),只“\ n";   ,,,num→美元发送(num→美元当前的(),+,1);   }

PHP中的发电机是什么