PHP5.5迭代生成器用法实例详解,php5.5生成器
PHP5.5迭代生成器用法实例详解,php5.5生成器
本文实例讲述了PHP5.5迭代生成器用法。分享给大家供大家参考,具体如下:
PHP5.5引入了迭代生成器的概念,迭代的概念早就在PHP有了,但是迭代生成器是PHP的一个新特性,这跟python3中的迭代生成器类似,看看PHP5.5的迭代生成器如何定义。
<?php function xrange($start, $end, $step = 1) { for ($i = $start; $i <= $end; $i += $step) { yield $i; } } foreach (xrange(1, 1000000) as $num) { echo $num, "\n"; }
注意关键字:yield,正是这个yeild关键字构建了一个迭代器,这个函数xrange跟以往的函数的不同之处就在这里。一般情况都是return一个值,而yield一个值就表示这是个迭代器,每循环一次这个迭代器就生成这个值,故名为迭代生成器,迭代生成器这个函数可以进行foreach循环,每次都产生一个值。
PHP5.5之前是通过定义类实现Iterator接口的方式来构造迭代器,通过yield构造迭代器将更加提升性能节省系统开销。
这种方法的优点是显而易见的.它可以让你在处理大数据集合的时候不用一次性的加载到内存中,甚至你可以处理无限大的数据流。
如上面例子所示,这个迭代器的功能是生成从1到1000000的数字,循环输出,那么使用以往的方式是生成好这1到1000000的数字到数组中,将会十分占用内存,因为是事先就要生成好所有结果,而不是用的时候按需生成,也就是说调用xrange这个迭代器的时候,里面的函数还没有真正的运行,直到你每一次的迭代。
再看看PHP官网的例子:
<?php function xrange($start, $limit, $step = 1) { for ($i = $start; $i <= $limit; $i += $step) { yield $i; } } echo 'Single digit odd numbers: '; /* * Note that an array is never created or returned, * which saves memory. */ foreach (xrange(1, 9, 2) as $number) { echo "$number "; } echo "\n"; ?>
这里的xrange是一个迭代,功能和range是一样的,如果使用range函数的话,那么函数内部实现会储存每个迭代的中间过程,即每个中间变量都有 个内存空间,那么首先程序使用的内存空间就大了,而且分配内存,回收内存都会导致程序的运行时间加长。但是如果使用上yield实现的xrange函数的 话,里面所有的中间变量都只使用一个内存$i,这样节省的时间和空间都会变小。
那么为什么yield会有这样的效果呢?联想到lua中的yield,这里就算是协程的概念了。在lua语言中,当程序运行到yield的时候,使用协程 将上下文环境记录住,然后将程序操作权归还到主函数,当主函数调用resume的时候,会重新唤起协程,读取yield记录的上下文。这样形成了程序语言 级别的多协程操作。php 5.5这里的yield也是同样的道理,当程序运行到yield的时候,当前程序就唤起协程记录上下文,然后主函数继续操作,只是php中没有使用如 resume一样的关键字,而是“在使用的时候唤起”协程。比如上例中的foreach迭代器就能唤起yield。所以上面的这个例子就能理解了。
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php操作office文档技巧总结(包括word,excel,access,ppt)》、《php日期与时间用法总结》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
您可能感兴趣的文章:
- 如何把php5.3版本升级到php5.4或者php5.5
- PHP5.5和之前的版本empty函数的不同之处
- PHP5.5在windows安装使用memcached服务端的方法
- php5.5中类级别的常量使用介绍
- php5.5新数组函数array_column使用
- php可应用于面包屑导航的迭代寻找家谱树实现方法
- php使用递归与迭代实现快速排序示例
- PHP迭代器的内部执行过程详解
- PHP迭代器实现斐波纳契数列的函数
- PHP设计模式之迭代器模式的深入解析

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

今年以来,360集团创始人周鸿祎在所有公开场合的讲话都离不开一个话题,那就是人工智能大模型。他曾自称“GPT的布道者”,对ChatGPT取得的突破赞不绝口,更是坚定看好由此产生的AI技术迭代。作为一个擅于表达的明星企业家,周鸿祎的演讲往往妙语连珠,所以他的“布道”也创造过很多热点话题,确实为AI大模型添了一把火。但对周鸿祎而言,光做意见领袖还不够,外界更关心他执掌的360公司如何应对这波AI新浪潮。事实上,在360内部,周鸿祎也早已掀起一场全员变革,4月份,他发出内部信,要求360每一位员工、每

循环与迭代:编程中的核心概念循环和迭代是编程中必不可少的概念,它们允许程序重复执行一组指令。循环用于明确指定重复的次数,而迭代则用于遍历集合或数据结构中的元素。循环类型有三种主要类型的循环:1.for循环for循环用于当你知道重复次数时执行代码块。它的语法如下:for(初始化;条件;递增/递减){//要重复执行的代码块}例如,以下for循环打印数字1到10:for(inti=1;i

TreeMap是JavaCollectionFramework的一个类,它实现了NavigableMap接口。它将地图的元素存储在树结构中,并提供了一种有效的方法来按排序顺序存储键值对。换句话说,它总是以升序返回元素。然而,Java提供了几种以降序遍历TreeMap的方法。在本文中,我们将探讨以逆序遍历TreeMap的方法。在Java中以相反顺序迭代TreeMap我们将使用以下方法以相反的顺序打印TreeMap的元素:使用TreeMap.descendingMap()方法使用TreeMap.de

从零开始学习jQuery迭代的实现方法,需要具体代码示例jQuery是一个流行的JavaScript库,广泛用于网页开发中。其中,迭代是jQuery中常用的操作之一,通过迭代可以对一组元素进行遍历,并进行相应的操作。本文将介绍如何从零开始学习jQuery迭代的实现方法,重点讨论迭代的基本原理及具体代码示例。一、迭代的基本原理在jQuery中,实现迭代主要依靠

Python3.x中如何使用fileinput模块进行文件迭代在Python编程中,我们经常需要对文件进行操作,例如读取文件内容、写入文件内容等。而在处理多个文件时,使用fileinput模块可以方便地进行文件迭代操作。本文将介绍如何在Python3.x中使用fileinput模块进行文件迭代,并提供代码示例。fileinput模块是Python标准库

循环与迭代:概念解析循环是一种控制结构,它允许代码块重复执行指定的次数或直到满足特定条件。python提供了多种循环类型,包括for循环、while循环和do-while循环。另一方面,迭代是一个抽象概念,它表示按顺序遍历序列元素的过程。Python提供了迭代器和生成器等工具来实现迭代。循环vs.迭代:异同点执行机制:循环显式控制执行流程,而迭代是通过迭代器对象隐式执行的。状态管理:循环保持其自己的状态(如计数器或条件),而迭代器封装了状态管理。使用场景:循环适用于需要重复执行固定次数或直到满足

如何在Java中使用循环语句实现迭代计算在编程中,我们经常需要进行一些重复性的计算或操作,这时候循环语句就发挥了重要的作用。在Java中,循环语句有三种形式:for循环、while循环和do-while循环。这些循环语句可以帮助我们实现迭代计算,即通过多次循环来逐步逼近想要的结果。下面将具体介绍如何使用这些循环语句在Java中实现迭代计算,并给出相应的代码示

循环循环是重复执行代码块直到满足特定条件的结构。python提供了多种循环类型:for循环:用于遍历序列(例如列表、元组)中的每个元素。foritemin[1,2,3,4,5]:print(item)#输出:1,2,3,4,5while循环:用于只要条件为真就重复执行代码块。count=0whilecount
