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设计模式之迭代器模式的深入解析

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

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

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

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

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

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

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

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


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

Dreamweaver Mac版
ビジュアル Web 開発ツール
