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 相关文章推荐
首页四格,首页五格For6.0(GBK)(UTF-8)[12种组合][9-18][版主安装测试通过]
Sep 24 PHP
PHP学习之整理字符串
Apr 17 PHP
114啦源码(114la)不能生成地方房产和地方报刊问题4级页面0字节的解决方法
Jan 12 PHP
完美解决thinkphp验证码出错无法显示的方法
Dec 09 PHP
ThinkPHP通过AJAX返回JSON的两种实现方法
Dec 18 PHP
PHP SPL标准库中的常用函数介绍
May 11 PHP
为你总结一些php信息函数
Oct 21 PHP
Thinkphp和Bootstrap结合打造个性的分页样式(推荐)
Aug 01 PHP
php实现的网页版剪刀石头布游戏示例
Nov 25 PHP
php实现简单的守护进程创建、开启与关闭操作
Aug 13 PHP
php实现多站点共用session实现单点登录的方法详解
Sep 18 PHP
PHP实现常用排序算法的方法
Feb 05 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
Syphon 虹吸式咖啡壶冲煮–拨动法
2021/03/03 冲泡冲煮
php递归列出所有文件和目录的代码
2008/09/10 PHP
PHP简洁函数(PHP简单明了函数语法)
2012/06/10 PHP
php异常处理技术,顶级异常处理器
2012/06/13 PHP
PHP中ob_start函数的使用说明
2013/11/11 PHP
jquery.alert 弹出式复选框实现代码
2009/06/15 Javascript
jQuery 数据缓存模块进化史详细介绍
2012/11/19 Javascript
深入理解JavaScript系列(41):设计模式之模板方法详解
2015/03/04 Javascript
JavaScript获取各大浏览器信息图示
2015/11/20 Javascript
JavaScript获取客户端IP的方法(新方法)
2016/03/11 Javascript
CascadeView级联组件实现思路详解(分离思想和单链表)
2016/04/12 Javascript
JS 面向对象之继承---多种组合继承详解
2016/07/10 Javascript
vue resource post请求时遇到的坑
2017/10/19 Javascript
ztree实现左边动态生成树右边为内容详情功能
2017/11/03 Javascript
JavaScript基于对象方法实现数组去重及排序操作示例
2018/07/10 Javascript
详解Vue源码学习之callHook钩子函数
2018/07/25 Javascript
详解Angular中通过$location获取地址栏的参数
2018/08/02 Javascript
详解微信小程序调用支付接口支付
2019/04/28 Javascript
防止Layui form表单重复提交的实现方法
2019/09/10 Javascript
js中addEventListener()与removeEventListener()用法案例分析
2020/03/02 Javascript
Quasar Input:type=&quot;number&quot; 去掉上下小箭头 实现加减按钮样式功能
2020/04/09 Javascript
使用Python的Flask框架实现视频的流媒体传输
2015/03/31 Python
使用Python保存网页上的图片或者保存页面为截图
2016/03/05 Python
Python读取图片属性信息的实现方法
2016/09/11 Python
Django中的Signal代码详解
2018/02/05 Python
seek引发的python文件读写的问题及解决
2019/07/26 Python
Django框架视图函数设计示例
2019/07/29 Python
Python获取一个用户名的组ID过程解析
2019/09/03 Python
python安装virtualenv虚拟环境步骤图文详解
2019/09/18 Python
Python如何将字符串转换为日期
2020/07/31 Python
Python Http请求json解析库用法解析
2020/11/28 Python
纽约家具、家居装饰和地毯店:ABC Carpet & Home
2017/06/21 全球购物
校园招聘策划书
2014/01/09 职场文书
中国梦演讲稿教师篇
2014/04/23 职场文书
2019年大学生职业生涯规划书
2019/03/25 职场文书
教你利用Selenium+python自动化来解决pip使用异常
2021/05/20 Python