当前位置:首页 > PHP教程 > php高级应用 > 列表

PHP yield关键字功能与用法分析

发布:smiling 来源: PHP粉丝网  添加日期:2021-11-03 21:18:16 浏览: 评论:0 

这篇文章主要介绍了PHP yield关键字功能与用法,结合实例形式分析了php5.5新增的yield关键字功能与相关使用技巧,需要的朋友可以参考下。

本文实例讲述了PHP yield关键字功能与用法,分享给大家供大家参考,具体如下:

yield 关键字是php5.5版本推出的一个特性,生成器函数的核心是yield关键字。它最简单的调用形式看起来像一个return申明,不同之处在于普通return会返回值并终止函数的执行,而yield会返回一个值给循环调用此生成器的代码并且只是暂停执行生成器函数。

Example #1 一个简单的生成值的例子

  1. <?php 
  2. function gen_one_to_three() { 
  3.   for ($i = 1; $i <= 3; $i++) { 
  4.     //注意变量$i的值在不同的yield之间是保持传递的。 
  5.     yield $i
  6.   } 
  7. $generator = gen_one_to_three(); 
  8. foreach ($generator as $value) { 
  9.   echo "$value\n"
  10. ?> 

简单来说就是:yield是仅仅是记录迭代过程中的一个过程值

补充示例:

示例2:

  1. /** 
  2.  * 计算平方数列 
  3.  * @param $start 
  4.  * @param $stop 
  5.  * @return Generator 
  6.  */ 
  7. function squares($start$stop) { 
  8.   if ($start < $stop) { 
  9.     for ($i = $start$i <= $stop$i++) { 
  10.       yield $i => $i * $i
  11.     } 
  12.   } 
  13.   else { 
  14.     for ($i = $start$i >= $stop$i--) { 
  15.       yield $i => $i * $i//迭代生成数组: 键=》值 
  16.     } 
  17.   } 
  18. foreach (squares(3, 15) as $n => $square) { 
  19.   echo $n . ‘squared is‘ . $square . ‘<br>‘; 

输出:

  1. 3 squared is 9 
  2. 4 squared is 16 
  3. 5 squared is 25 
  4. ... 

示例3:

  1. //对某一数组进行加权处理 
  2. $numbers = array(‘nike‘ => 200, ‘jordan‘ => 500, ‘adiads‘ => 800); 
  3. //通常方法,如果是百万级别的访问量,这种方法会占用极大内存 
  4. function rand_weight($numbers
  5.   $total = 0; 
  6.   foreach ($numbers as $number => $weight) { 
  7.     $total += $weight
  8.     $distribution[$number] = $total
  9.   } 
  10.   $rand = mt_rand(0, $total-1); 
  11.   foreach ($distribution as $num => $weight) { 
  12.     if ($rand < $weightreturn $num
  13.   } 
  14. //改用yield生成器 
  15. function mt_rand_weight($numbers) { 
  16.   $total = 0; 
  17.   foreach ($numbers as $number => $weight) { 
  18.     $total += $weight
  19.     yield $number => $total
  20.   } 
  21. function mt_rand_generator($numbers
  22.   $total = array_sum($numbers); 
  23.   $rand = mt_rand(0, $total -1); 
  24.   foreach (mt_rand_weight($numbersas $num => $weight) { 
  25.     if ($rand < $weightreturn $num
  26.   } 
  27. }

Tags: yield关键字 PHP关键字

分享到: