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 一个简单的生成值的例子
- <?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;
- }
- }
Tags: yield关键字 PHP关键字
相关文章
- ·php自动获取关键字代码(2014-09-08)
- ·PHP给文字内容中的关键字进行套红处理(2021-07-28)
- ·PHP中Static(静态)关键字功能与用法实例分析(2021-11-15)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)