首页 / PHP / PHP yield关键字功能与用法分析
PHP yield关键字功能与用法分析
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PHP yield关键字功能与用法分析,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2112字,纯文字阅读大概需要4分钟。
内容图文
本文实例讲述了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数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
内容总结
以上是互联网集市为您收集整理的PHP yield关键字功能与用法分析全部内容,希望文章能够帮你解决PHP yield关键字功能与用法分析所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。