当前位置: 首页 > news >正文

PHP生成器yield怎么节省内存开销【教程】

yield能省内存是因为不一次性构建完整数组,而是边计算边产出单个值,内存占用稳定在几百KB;典型场景包括大文件逐行处理、数据库游标遍历、递归树展开和实时日志解析。yield 生成器为什么能省内存因为 yield 不一次性把所有数据装进数组,而是每次只产出一个值,用完就扔。普通 foreach 遍历大数组时,整个数组得常驻内存;而用生成器,哪怕处理百万行数据库结果或超大文件,内存占用通常稳定在几百 KB 级别。关键不是“语法酷”,是 PHP 在底层根本没构建完整数组——它靠迭代器协议边算边交,上层代码感知不到中间态。什么时候必须用 yield 而不是 return 数组典型场景:读取大文件逐行处理、数据库游标式遍历、递归树结构展开、实时日志流解析。这些场景下,你根本不知道总量有多大,或者压根不需要随机访问。数据库查询返回 50 万条记录?return $pdo->fetchAll() 可能直接 OOM;改用 yield 每次只 fetch 一条,内存几乎不涨解析 2GB 的 CSV?fgets() + yield 比 file_get_contents() + explode() 安全十倍写递归目录扫描?yield from scanDir($path) 避免深递归栈溢出,也避免把全部路径存进内存常见踩坑:yield 写错位置或混用 return最常犯的错是函数里既写了 yield 又写了 return $value(非 null)——PHP 7.1+ 会报 ParseError: A generator must not return a value。生成器函数只能 yield,结尾自然退出,不能 return 123。立即学习“PHP免费学习笔记(深入)”;另一个隐形坑:生成器对象本身不执行逻辑,只有第一次 foreach 或调用 current() 时才触发。如果忘了遍历,函数体压根不会跑。 AI智研社 AI智研社是一个专注于人工智能领域的综合性平台

http://www.jsqmd.com/news/675403/

相关文章:

  • Phi-3.5-mini-instruct惊艳案例:将学术论文摘要转化为大众科普短视频脚本
  • 【Linux】进程(2)状态
  • 大模型很热,但怎么用?预算不多也能搞?10大政企AI落地案例,助你收藏学习,开启AI转型之路!
  • AWPortrait-Z人像美化神器:5分钟快速部署,小白也能轻松上手
  • LeetCode 每日一题笔记 日期:2026.04.09 题目:3655.区间乘法查询后的异或二
  • 2026 论文神器榜:10 款 AI 工具让本科写作告别熬夜爆肝
  • vulhub系列-76-02-Breakout(超详细)
  • CSS如何快速获取网页上的标准色值_借助开发者工具的取色器和色彩格式转换功能
  • AI Coding的效能传导:从个体提速到组织进化
  • burpsuite-基础一
  • unity mcp接入 实现一句话生成游戏!
  • SEER‘S EYE 预言家之眼实战:集成至Dify平台构建AI Agent应用
  • Linux命令:ss
  • 从零开始:Spring Boot + MyBatis 搭建后端接口完整教程
  • Linux---信号
  • 线性代数与矩阵运算:AI世界的数学基石——从SVD到特征值分解的实战解析
  • 基于Simulink的轴向磁通电机多物理场耦合仿真​
  • NativeScript APP 开发备忘
  • GitHub 上的 CI/CD 怎么用?从 GitHub Actions 到一条可上线的流水线
  • 学Simulink——基于Simulink的电机参数在线辨识与自适应控制​
  • 我第一次做 OData 后端服务时,真正绊住我的,不是代码,而是 Cloud Foundry 里的这些基础坑
  • yolov8模型训练MOT20数据集 行人多目标跟踪计数数据集的训练及应用 如何根据mot20数据集 来实现行人目标识别,行人追踪,行人的计数
  • Linux命令:ifconfig
  • 在 Word 中,一个公式就能看出你会不会高效排版
  • LumiPixel Canvas Quest与其他开源模型的对比评测
  • 双链表详解
  • Qianfan-OCR入门指南:如何扩展自定义解析模式(如专利权利要求提取)
  • [力扣 105]二叉树前中后序遍历精讲:原理、实现与二叉树还原
  • 如何让全面战争MOD开发从繁琐变得优雅:RPFM的现代化解决方案
  • OpenClaw Web 界面集成教程|通过网页与你的 AI 智能体对话