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


Posted in PHP onJanuary 03, 2019

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

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

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

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

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

补充示例:

示例2:

/**
 * 计算平方数列
 * @param $start
 * @param $stop
 * @return Generator
 */
function squares($start, $stop) {
  if ($start < $stop) {
    for ($i = $start; $i <= $stop; $i++) {
      yield $i => $i * $i;
    }
  }
  else {
    for ($i = $start; $i >= $stop; $i--) {
      yield $i => $i * $i; //迭代生成数组: 键=》值
    }
  }
}
foreach (squares(3, 15) as $n => $square) {
  echo $n . ‘squared is‘ . $square . ‘<br>‘;
}

输出:

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

示例3:

//对某一数组进行加权处理
$numbers = array(‘nike‘ => 200, ‘jordan‘ => 500, ‘adiads‘ => 800);
//通常方法,如果是百万级别的访问量,这种方法会占用极大内存
function rand_weight($numbers)
{
  $total = 0;
  foreach ($numbers as $number => $weight) {
    $total += $weight;
    $distribution[$number] = $total;
  }
  $rand = mt_rand(0, $total-1);
  foreach ($distribution as $num => $weight) {
    if ($rand < $weight) return $num;
  }
}
//改用yield生成器
function mt_rand_weight($numbers) {
  $total = 0;
  foreach ($numbers as $number => $weight) {
    $total += $weight;
    yield $number => $total;
  }
}
function mt_rand_generator($numbers)
{
  $total = array_sum($numbers);
  $rand = mt_rand(0, $total -1);
  foreach (mt_rand_weight($numbers) as $num => $weight) {
    if ($rand < $weight) return $num;
  }
}

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php 删除无限级目录与文件代码共享
Nov 22 PHP
PHP中文件缓存转内存缓存的方法
Dec 06 PHP
php定时删除文件夹下文件(清理缓存文件)
Jan 23 PHP
php购物车实现方法
Jan 03 PHP
PHP的openssl加密扩展使用小结(推荐)
Jul 18 PHP
php判断用户是否关注微信公众号
Jul 22 PHP
PHP基于mssql扩展远程连接MSSQL的简单实现方法
Oct 08 PHP
PHP实现的同步推荐操作API接口案例分析
Nov 30 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
Jun 13 PHP
详解PHP神奇又有用的Trait
Mar 25 PHP
php设计模式之策略模式应用案例详解
Jun 17 PHP
Laravel使用RabbitMQ的方法示例
Jun 18 PHP
PHP获取对象属性的三种方法实例分析
Jan 03 #PHP
PHP获取HTTP body内容的方法
Dec 31 #PHP
php两点地理坐标距离的计算方法
Dec 29 #PHP
php如何计算两坐标点之间的距离
Dec 29 #PHP
PHP命名空间简单用法示例
Dec 28 #PHP
PHP实现函数内修改外部变量值的方法示例
Dec 28 #PHP
PHP面向对象程序设计继承用法简单示例
Dec 28 #PHP
You might like
php中对xml读取的相关函数的介绍一
2008/06/05 PHP
PHP连接SQLServer2005 的问题解决方法
2010/07/19 PHP
基于php下载文件的详解
2013/06/02 PHP
php-perl哈希算法实现(times33哈希算法)
2013/12/30 PHP
Laravel实现搜索的时候分页并携带参数
2019/10/15 PHP
javascript的数组和常用函数详解
2014/05/09 Javascript
js中split和replace的用法实例
2015/02/28 Javascript
简介JavaScript中valueOf()方法的使用
2015/06/05 Javascript
javascript的正则匹配方法学习
2016/02/24 Javascript
jQuery根据name属性进行查找的用法分析
2016/06/23 Javascript
angularJS模态框$modal实例代码
2017/05/27 Javascript
AngularJS路由删除#符号解决的办法
2017/09/28 Javascript
使用Vue.observable()进行状态管理的实例代码详解
2019/05/26 Javascript
在react项目中使用antd的form组件,动态设置input框的值
2020/10/24 Javascript
ant design vue datepicker日期选择器中文化操作
2020/10/28 Javascript
快速解决vue2+vue-cli3项目ie兼容的问题
2020/11/17 Vue.js
vue使用exif获取图片旋转,压缩的示例代码
2020/12/11 Vue.js
Python如何快速实现分布式任务
2017/07/06 Python
利用Tkinter和matplotlib两种方式画饼状图的实例
2017/11/06 Python
Python3.6连接Oracle数据库的方法详解
2018/05/18 Python
对Python生成汉字字库文字,以及转换为文字图片的实例详解
2019/01/29 Python
Python使用Turtle库绘制一棵西兰花
2019/11/23 Python
北美个性化礼品商店:Things Remembered
2018/06/12 全球购物
SQL面试题
2013/12/09 面试题
业务经理岗位职责
2013/11/11 职场文书
行政部总经理岗位职责
2014/01/04 职场文书
工会工作先进事迹
2014/08/18 职场文书
竞选班干部演讲稿100字
2014/08/20 职场文书
教师群众路线教育实践活动学习笔记
2014/11/05 职场文书
唐山大地震的观后感
2015/06/05 职场文书
2016年党校科级干部培训班学习心得体会
2016/01/06 职场文书
《弟子规》读后感:知廉耻、明是非、懂荣辱、辨善恶
2019/12/03 职场文书
读后感怎么写?书写读后感的基本技巧!
2019/12/10 职场文书
Pytorch 使用tensor特定条件判断索引
2021/04/08 Python
Python绘制散乱的点构成的图的方法
2022/04/21 Python
关于MySQL中explain工具的使用
2023/05/08 MySQL