• 售前

  • 售后

热门帖子
入门百科

PHP天生器功能与用法实例分析

[复制链接]
武汉嘉瑞 显示全部楼层 发表于 2021-10-25 19:30:23 |阅读模式 打印 上一主题 下一主题
本文实例报告了PHP天生器功能与用法。分享给各人供各人参考,详细如下:
1. 官方阐明:天生器提供了一种更轻易的方法来实现简朴的对象迭代,相比力界说类实现 Iterator 接口的方式,性能开销和复杂性大大低落。天生器答应你在 foreach 代码块中写代码来迭代一组数据而不需要在内存中创建一个数组。
2. 天生器就像一个普通的自界说函数一样, 和普通函数只返回一次差别的是, 天生器可以根据需要 yield 多次,以便天生需要迭代的值。
3. 代码示例:
  1. //未使用生成器
  2. echo '开始内存:'.getMemory().'<br>';
  3. $nums = range(0,1000000);
  4. echo '结束内存:'.getMemory().'<br>';
  5. //输出结果
  6. //开始内存:0.23M
  7. //结束内存:130.31​
  8. //使用生成器
  9. echo '开始内存:'.getMemory().'<br>';
  10. $nums = xrange(1000000);
  11. function xrange($total)
  12. {
  13.   for ($i = 0; $i < $total; $i++) {
  14.     yield $i;
  15.   }
  16. }
  17. echo '结束内存:'.getMemory().'<br>';
  18. //输出结果
  19. //开始内存:0.23M
  20. //结束内存:0.23M
复制代码
4. 实际应用示例
  1. /**
  2. * 大量数据生成示例
  3. * @param int $page
  4. * @param int $limit
  5. * @return Generator
  6. */
  7. public function generator($page = 1,$limit = 50000)
  8. {
  9.   while (true) {
  10.     echo "第{$page}次".'generator开始内存:'.$this->getMemory().'<br>';
  11.     $start = ($page-1) * $limit;
  12.     $sql = "SELECT p.id,p.wh_code,p.goods_sn FROM p_product as p WHERE p.wh_code LIKE '%YB%' OR p.wh_code LIKE '%DZWH%' LIMIT {$start},{$limit} ";
  13.     $resultAll = db()->fetchAll($sql);
  14.     yield $resultAll; //生成器​
  15.     if (count($resultAll) != $limit) {
  16.       break;
  17.     }
  18.     echo "第{$page}次".'generator结束内存:'.$this->getMemory().'<br>';
  19.     $page++;
  20.   }
  21. }
  22.     //测试生成器内存消耗
  23. //    foreach ($this->generator() as $result) {
  24. //      var_dump($result[0]);
  25. //    }
复制代码
更多关于PHP相干内容感兴趣的读者可查察本站专题:《php常用函数与本领总结》、《php字符串(string)用法总结》、《PHP数组(Array)操纵本领大全》、《PHP数据布局与算法教程》及《php步伐设盘算法总结》
盼望本文所述对各人PHP步伐设计有所资助。

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作