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 如何向 MySQL 发送数据
Oct 09 PHP
ie6 动态缩略图不显示的原因
Jun 21 PHP
用PHP提取中英文词语以及数字的首字母的方法介绍
Apr 23 PHP
(PHP实现)只使用++运算实现加法,减法,乘法,除法
Jun 27 PHP
php调用淘宝开放API实现根据卖家昵称获取卖家店铺ID的方法
Jul 29 PHP
Yii2.0高级框架数据库增删改查的一些操作
Nov 16 PHP
PHP错误处理函数
Apr 03 PHP
php同时使用session和cookie来保存用户登录信息的实现代码
May 13 PHP
php封装的验证码工具类完整实例
Oct 19 PHP
分析php://output和php://stdout的区别
May 06 PHP
Yii框架使用PHPExcel导出Excel文件的方法分析【改进版】
Jul 24 PHP
利用ajax+php实现商品价格计算
Mar 31 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代码
2010/07/17 PHP
php实现自动获取生成文章主题关键词功能的深入分析
2013/06/03 PHP
PHP fastcgi模式上传大文件(大约有300多K)报错
2014/09/28 PHP
php中的动态调用实例分析
2015/01/07 PHP
PHP配置ZendOpcache插件加速
2019/02/14 PHP
javascript实现 在光标处插入指定内容
2007/05/25 Javascript
Javascript 判断函数类型完美解决方案
2009/09/02 Javascript
jquery键盘事件使用介绍
2011/11/01 Javascript
jQuery:节点(插入,复制,替换,删除)操作
2013/03/04 Javascript
jquery限定文本框只能输入数字即整数和小数
2013/11/29 Javascript
判断在css加载完毕后执行后续代码示例
2014/09/03 Javascript
jquery获取radio值实例
2014/10/16 Javascript
javascript实现textarea中tab键的缩排处理方法
2015/06/26 Javascript
用window.onerror捕获并上报Js错误的方法
2016/01/27 Javascript
在vue中使用公共过滤器filter的方法
2018/06/26 Javascript
解决vue组件props传值对象获取不到的问题
2019/06/06 Javascript
浅谈vue的第一个commit分析
2020/06/08 Javascript
vue 单页应用和多页应用的优劣
2020/10/22 Javascript
Python BeautifulSoup中文乱码问题的2种解决方法
2014/04/22 Python
在Python中使用next()方法操作文件的教程
2015/05/24 Python
Python使用Matplotlib实现Logos设计代码
2017/12/25 Python
Python实现ping指定IP的示例
2018/06/04 Python
python中用logging实现日志滚动和过期日志删除功能
2019/08/20 Python
python遍历文件目录、批量处理同类文件
2019/08/31 Python
关于TensorFlow新旧版本函数接口变化详解
2020/02/10 Python
Python基于百度AI实现OCR文字识别
2020/04/02 Python
Python操作MySQL数据库的示例代码
2020/07/13 Python
Python如何实现机器人聊天
2020/09/10 Python
英国最受欢迎的母婴精品品牌:JoJo Maman BéBé
2021/02/17 全球购物
颇特女士香港官网:NET-A-PORTER香港
2021/03/08 全球购物
The North Face意大利官网:服装、背包和鞋子
2020/06/17 全球购物
机电一体化大学生求职信
2013/11/08 职场文书
大学生自荐信
2013/12/11 职场文书
给护士表扬信
2014/01/19 职场文书
村主任个人对照检查材料
2014/10/01 职场文书
运动会主持词大全
2015/07/02 职场文书