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 相关文章推荐
实时抓取YAHOO股票报价的代码
Oct 09 PHP
dede3.1分页文字采集过滤规则详说(图文教程)续四
Apr 03 PHP
无JS,完全php面向过程数据分页实现代码
Aug 27 PHP
YII实现分页的方法
Jul 09 PHP
PHP实现利用MySQL保存session的方法
Aug 23 PHP
php安装swoole扩展的方法
Mar 19 PHP
用PHP生成excel文件到指定目录
Jun 22 PHP
php轻量级的性能分析工具xhprof的安装使用
Aug 12 PHP
Yii操作数据库实现动态获取表名的方法
Mar 29 PHP
利用PHPExcel读取Excel的数据和导出数据到Excel
May 12 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
Sep 22 PHP
yii2中关于加密解密的那些事儿
Jun 12 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 INI配置文件的解析实现分析
2011/01/04 PHP
PHP读取文件并可支持远程文件的代码分享
2012/10/03 PHP
PHP获取http请求的头信息实现步骤
2012/12/16 PHP
基于PHP的简单采集数据入库程序【续篇】
2014/07/30 PHP
广告代码静态化js通用函数
2007/05/09 Javascript
非html5实现js版弹球游戏示例代码
2013/09/22 Javascript
jQuery .tmpl() 用法示例介绍
2014/08/21 Javascript
HTML的select控件美化
2017/03/27 Javascript
jQuery.ajax向后台传递数组问题的解决方法
2017/05/12 jQuery
jQuery dateRangePicker插件使用方法详解
2017/07/28 jQuery
javascript兼容性(实例讲解)
2017/08/15 Javascript
详解Node全局变量global模块
2017/09/28 Javascript
vue根据值给予不同class的实例
2018/09/29 Javascript
js prototype深入理解及应用实例分析
2019/11/25 Javascript
在Python中操作字典之clear()方法的使用
2015/05/21 Python
解决Django中多条件查询的问题
2019/07/18 Python
CSS3 实现的缩略图悬停效果
2020/12/09 HTML / CSS
input元素的url类型和email类型简介
2012/07/11 HTML / CSS
HTML5 audio标签使用js进行播放控制实例
2015/04/24 HTML / CSS
HTML5实现桌面通知 提示功能
2017/10/11 HTML / CSS
纽约著名的服装辅料来源:M&J Trimming
2017/07/26 全球购物
英国排名第一的礼品体验公司:Red Letter Days
2018/08/16 全球购物
曼城官方网上商店:Manchester City
2019/09/10 全球购物
mysql有关权限的表都有哪几个
2015/04/22 面试题
25道Java面试题集合
2013/05/21 面试题
个人自荐信
2013/12/05 职场文书
小学毕业感言300字
2014/02/19 职场文书
希特勒的演讲稿
2014/05/23 职场文书
2014年中班下学期工作总结
2014/12/11 职场文书
幼儿园教师个人总结
2015/02/05 职场文书
焦裕禄观后感
2015/06/03 职场文书
小学体育组工作总结2015
2015/07/21 职场文书
大学班干部竞选稿
2015/11/20 职场文书
女性励志书籍推荐
2019/08/19 职场文书
Python常用配置文件ini、json、yaml读写总结
2021/07/09 Python
win11怎么用快捷键锁屏? windows11锁屏的几种方法
2021/11/21 数码科技