PHP中生成器yield怎么使用


这篇文章主要介绍了PHP中生成器yield怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇PHP中生成器yield怎么使用文章都会有所收获,下面我们一起来看看吧。生成器函数看上去就像一个普通函数, 除了不是返回一个值之外, 生成器会根据需求产生更多的值。看以下的例子:当然, 这不是他生效的方式, 前面的例子会给你一个致命的错误:类生成器的对象不能被转换成字符串解决运行内存的瓶颈,php程序中的变量存储在内存中,之前有遇到过读取Excel文件时候,会出现内存不足,出现:FatalError:Allowedmemorysizeofxxxxxxbytes所以会设置php 最大运行内存的设置:ini_set('memory_limit', '200M')但是当我们读取5g 这么大的文件的时候,我们运行内存可能就吃不消了,所以会选择yield前面的错误意味着getValues()方法不会如预期返回一个字符串,让我们检查一下他的类型:生成器类实现了生成器接口, 这意味着你必须遍历getValue()方法来取值:但这不是唯一的不同!一个生成器运行你写使用循环来迭代一维数组的代码,而不需要在内存中创建是一个数组,这可能会导致你超出内存限制。在下面的例子里我们创建一个有 800,000 元素的数字同时从getValues()方法中返回他,同时在此期间,我们将使用函数memory_get_usage()来获取分配给次脚本的内存, 我们将会每增加 200,000 个元素来获取一下内存使用量,这意味着我们将会提出四个检查点:前面例子发生的情况是这个脚本的内存消耗和输出:0.34 MB
8.35 MB
16.35 MB
32.35 MB这意味着我们的几行脚本消耗了超过 30MB的内存, 每次你你添加一个元素到$valuesArray数组中, 都会增加他在内存中的大小。让我们免费云主机域名使用yield同样的例子:这个脚本的输出令人惊讶:0.34 MB
0.34 MB
0.34 MB
0.34 MB这不意味着你从return表达式迁移到yield,但如果你在应用中创建会导致服务器上内存出问题的巨大数组,则yield更加适合你的情况。这里有很多yield的选项, 我将强调他们中的几个:a. 使用yield, 你也可以使用return。b. 返回键值对:1 使用生成器来生成一个1到100的数组2 打印出来,看下返回究竟是什么结果是:可见是一个对象,是一个生成器对象,既然是对象那么也就是可以用foreach来遍历3 遍历生成器看到可以完整遍历出来,那么与那样实现的不同地方,意义在哪里呢。重点来了。4 两者内存占用比较上面已经测试过使用数组的方式,随着范围的增大占用的内存剧增,很快就超过了PHP的内存上限。那么使用生成器占用了多少内存呢,来看看就知道了。可以看到只占用了576bytes,当然每个人测试的可能都会有点不同,环境不同,但是这不是重点。我们再尝试增加数字范围,可以看到数字范围并没有影响到内存占用,也就是可以轻松的遍历超大数字。这下我们就可以遍历1到10000000的数字了,不相信内存占用那么低的小伙伴,可以打开任务管理器毫无波澜,即时再上调数字范围。5、生成器遍历原理生成器既然这么强大,那么他的遍历原理是什么呢。使用foreach遍历的时候,相当于生成器执行了以下操作。关于“PHP中生成器yield怎么使用”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“PHP中生成器yield怎么使用”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注百云主机行业资讯频道。

相关推荐: html5表单中file指的是什么

这篇文章主要讲解了“html5表单中file指的是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“html5表单中file指的是什么”吧! 在html5中,file是input元素中type属性的属性值,ty…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 03/21 19:21
下一篇 03/21 19:21

相关推荐