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脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++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

PHP語言開發中避免出現迭代遞歸陷阱迭代和遞歸是程式設計中兩種不同的流程控制方式,它們的使用取決於實際應用場景和開發者的編碼習慣。在PHP開發中,迭代和遞歸的使用是常見的,但它們也可能出現陷阱,導致程式碼效率低、出現錯誤等問題。因此,在開發過程中需要注意一些技巧,以避免迭代遞歸陷阱的出現。迭代和遞歸介紹迭代和遞歸都是循環結構,用於多次執行同一塊程式碼。迭代的基本思

從零開始學習jQuery迭代的實作方法,需要具體程式碼範例jQuery是一個流行的JavaScript函式庫,廣泛用於網頁開發中。其中,迭代是jQuery中常用的操作之一,透過迭代可以對一組元素進行遍歷,並進行對應的操作。本文將介紹如何從零開始學習jQuery迭代的實作方法,重點討論迭代的基本原理及具體程式碼範例。一、迭代的基本原理在jQuery中,實現迭代主要依靠

Python3.x中如何使用fileinput模組進行檔案迭代在Python程式設計中,我們經常需要對檔案進行操作,例如讀取檔案內容、寫入檔案內容等。而在處理多個檔案時,使用fileinput模組可以方便地進行檔案迭代操作。本文將介紹如何在Python3.x中使用fileinput模組進行檔案迭代,並提供程式碼範例。 fileinput模組是Python標準函式庫

如何在Java中使用循環語句實現迭代計算在程式設計中,我們經常需要進行一些重複性的計算或操作,這時候循環語句就發揮了重要的作用。在Java中,迴圈語句有三種形式:for迴圈、while迴圈和do-while迴圈。這些循環語句可以幫助我們實現迭代計算,也就是透過多次循環來逐步逼近想要的結果。以下將具體介紹如何使用這些循環語句在Java中實現迭代計算,並給出對應的程式碼示

循環與迭代:概念解析循環是一種控制結構,它允許程式碼區塊重複執行指定的次數或直到滿足特定條件。 python提供了多種循環類型,包括for循環、while循環和do-while循環。另一方面,迭代是一個抽象概念,它表示按順序遍歷序列元素的過程。 Python提供了迭代器和生成器等工具來實現迭代。循環vs.迭代:異同點執行機制:循環明確控制執行流程,而迭代是透過迭代器物件隱式執行的。狀態管理:循環保持自己的狀態(如計數器或條件),而迭代器封裝了狀態管理。使用場景:循環適用於需要重複執行固定次數或直到滿足
