当前位置: 首页 > 后端技术 > PHP

php生成器

时间:2023-03-30 03:46:50 PHP

一:生成器的概念:生成器提供了一种更简单的方法来实现简单的对象迭代,生成器允许你在foreach代码块中编写代码来迭代一组数据,而不需要在里面创建数组内存,这将达到您的内存限制,或者需要相当长的处理时间。相反,您可以编写一个生成器函数,就像普通的自定义函数一样,而不是只返回一次,生成器可以根据需要多次生成需要迭代的值。二:生成器的优点:1:生成器对PHP应用的性能会有很大的影响2:PHP代码运行时节省大量内存3:比较适合计算大量数据3:生成器语法:generatorfunction核心是yield关键字。它最简单的调用形式看起来像一个return语句,不同之处在于正常的return返回一个值并终止函数的执行,而yield返回一个值给循环遍历生成器的代码并简单地暂停生成器函数的执行。四:生成器的一个简单例子:我们都知道php中有一个range函数。它的作用是创建一个包含指定范围元素的数组。它的基本语法是range(low,high,step),意思是它包含从低到高的一个整数或字符,包括在内。如果high小于low,则倒序返回数组,step表示步长。默认步长为1。例如:range(0,10)输出结果为:Array([0]=>0[1]=>1[2]=>2[3]=>3[4]=>4[5]=>5[6]=>6[7]=>7[8]=>8[9]=>9[10]=>10)但是如果我们想得到所有数组1-10000000,调用range(0,10000000)会导致占用内存耗尽。这时候我们可以利用php的generator来实现1)写一个generator参数函数publicfunctionrangeText($start,$limit,$step=1){if($start<$limit){if($step<=0){thrownewInvalidConfigException('步长至少大于0');}for($i=$start;$i<=$limit;$i+=$step){yield$i;');}for($i=$start;$i>=$limit;$i+=$step){yield$i;}}}2)调用生成函数foreach($this->rangeText(0,10000000)as$number){echo$number.'
';}调用生成函数后,我们可以打印出所有0-10000000之间的数字五:生成器简单实用PHP开发经常需要读取大文件,比如csv文件,文本文件,或者一些日志文件。如果这些文件很大,比如10G。这时候直接把所有的内容读到内存中计算是不现实的。那么这里生成器就可以派上用场示例:使用生成器读取txt文件1)写一个读取txt文件的生成器函数publicfunctionreadTest($txt){//打开文件$handle=fopen($txt,'rb');//检查是否到达文件末尾while(feof($handle)===false){//使用生成器逐行读取文件数据yieldfgets($handle);}//关闭打开的文件fclose($handle);}2)调用读取txt文件的生成器函数foreach($this->readTest('test.txt')as$key=>$value){echo$value.'
';}这时候我们可以在浏览器中看到txt文件的内容