欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHP5.5迭代生成器用法實(shí)例詳解

 更新時(shí)間:2016年03月16日 11:09:17   作者:小談博客  
這篇文章主要介紹了PHP5.5迭代生成器用法,結(jié)合實(shí)例形式詳細(xì)分析了PHP5.5迭代生成器的功能,定義及相關(guān)使用技巧,需要的朋友可以參考下

本文實(shí)例講述了PHP5.5迭代生成器用法。分享給大家供大家參考,具體如下:

PHP5.5引入了迭代生成器的概念,迭代的概念早就在PHP有了,但是迭代生成器是PHP的一個(gè)新特性,這跟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";
}

注意關(guān)鍵字:yield,正是這個(gè)yeild關(guān)鍵字構(gòu)建了一個(gè)迭代器,這個(gè)函數(shù)xrange跟以往的函數(shù)的不同之處就在這里。一般情況都是return一個(gè)值,而yield一個(gè)值就表示這是個(gè)迭代器,每循環(huán)一次這個(gè)迭代器就生成這個(gè)值,故名為迭代生成器,迭代生成器這個(gè)函數(shù)可以進(jìn)行foreach循環(huán),每次都產(chǎn)生一個(gè)值。

PHP5.5之前是通過定義類實(shí)現(xiàn)Iterator接口的方式來構(gòu)造迭代器,通過yield構(gòu)造迭代器將更加提升性能節(jié)省系統(tǒng)開銷。

這種方法的優(yōu)點(diǎn)是顯而易見的.它可以讓你在處理大數(shù)據(jù)集合的時(shí)候不用一次性的加載到內(nèi)存中,甚至你可以處理無限大的數(shù)據(jù)流。

如上面例子所示,這個(gè)迭代器的功能是生成從1到1000000的數(shù)字,循環(huán)輸出,那么使用以往的方式是生成好這1到1000000的數(shù)字到數(shù)組中,將會(huì)十分占用內(nèi)存,因?yàn)槭鞘孪染鸵珊盟薪Y(jié)果,而不是用的時(shí)候按需生成,也就是說調(diào)用xrange這個(gè)迭代器的時(shí)候,里面的函數(shù)還沒有真正的運(yùn)行,直到你每一次的迭代。

再看看PHP官網(wǎng)的例子:

<?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是一個(gè)迭代,功能和range是一樣的,如果使用range函數(shù)的話,那么函數(shù)內(nèi)部實(shí)現(xiàn)會(huì)儲(chǔ)存每個(gè)迭代的中間過程,即每個(gè)中間變量都有 個(gè)內(nèi)存空間,那么首先程序使用的內(nèi)存空間就大了,而且分配內(nèi)存,回收內(nèi)存都會(huì)導(dǎo)致程序的運(yùn)行時(shí)間加長(zhǎng)。但是如果使用上yield實(shí)現(xiàn)的xrange函數(shù)的 話,里面所有的中間變量都只使用一個(gè)內(nèi)存$i,這樣節(jié)省的時(shí)間和空間都會(huì)變小。

那么為什么yield會(huì)有這樣的效果呢?聯(lián)想到lua中的yield,這里就算是協(xié)程的概念了。在lua語(yǔ)言中,當(dāng)程序運(yùn)行到y(tǒng)ield的時(shí)候,使用協(xié)程 將上下文環(huán)境記錄住,然后將程序操作權(quán)歸還到主函數(shù),當(dāng)主函數(shù)調(diào)用resume的時(shí)候,會(huì)重新喚起協(xié)程,讀取yield記錄的上下文。這樣形成了程序語(yǔ)言 級(jí)別的多協(xié)程操作。php 5.5這里的yield也是同樣的道理,當(dāng)程序運(yùn)行到y(tǒng)ield的時(shí)候,當(dāng)前程序就喚起協(xié)程記錄上下文,然后主函數(shù)繼續(xù)操作,只是php中沒有使用如 resume一樣的關(guān)鍵字,而是“在使用的時(shí)候喚起”協(xié)程。比如上例中的foreach迭代器就能喚起yield。所以上面的這個(gè)例子就能理解了。

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php操作office文檔技巧總結(jié)(包括word,excel,access,ppt)》、《php日期與時(shí)間用法總結(jié)》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫(kù)操作入門教程》及《php常見數(shù)據(jù)庫(kù)操作技巧匯總

希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • 淺談Laravel中使用Slack進(jìn)行異常通知

    淺談Laravel中使用Slack進(jìn)行異常通知

    異常處理是軟件開發(fā)過程中無法逃避的問題。對(duì)于一套設(shè)計(jì)良好代碼高效的程序,出現(xiàn)異常的可能性會(huì)比較低,但這并不意味著不會(huì)出現(xiàn)異常,有些異常甚至?xí)饑?yán)重的后果,所以如何及時(shí)的發(fā)現(xiàn)程序中的異常并處理它便顯得十分重要了。
    2021-05-05
  • PHP使用PDO 連接與連接管理操作實(shí)例分析

    PHP使用PDO 連接與連接管理操作實(shí)例分析

    這篇文章主要介紹了PHP使用PDO 連接與連接管理操作,結(jié)合實(shí)例形式分析了PHP使用PDO 連接mysql數(shù)據(jù)庫(kù)的連接建立、關(guān)閉、持久化連接等相關(guān)操作技巧,需要的朋友可以參考下
    2020-04-04
  • Thinkphp6 配置并使用redis圖文詳解

    Thinkphp6 配置并使用redis圖文詳解

    這篇文章主要介紹了Thinkphp6 配置并使用redis的方法,結(jié)合實(shí)例形式詳細(xì)分析了Redis的安裝、配置以及thinkphp6操作Redis的基本技巧,需要的朋友可以參考下
    2023-06-06
  • php 常用類整理

    php 常用類整理

    在實(shí)際開發(fā)過程會(huì)經(jīng)常會(huì)遇到一些重復(fù)的操作,如果每次都要自己去實(shí)現(xiàn)這無疑加重了自己的工作量,下面對(duì)一些可能經(jīng)常用到的類做個(gè)整理.
    2009-12-12
  • PHP使用ajax的post方式下載excel文件簡(jiǎn)單示例

    PHP使用ajax的post方式下載excel文件簡(jiǎn)單示例

    這篇文章主要介紹了PHP使用ajax的post方式下載excel文件,結(jié)合簡(jiǎn)單示例形式分析了php后端Excel文件下載及前端ajax交互相關(guān)操作技巧,需要的朋友可以參考下
    2019-08-08
  • PHP創(chuàng)建文件及寫入數(shù)據(jù)(覆蓋寫入,追加寫入)的方法詳解

    PHP創(chuàng)建文件及寫入數(shù)據(jù)(覆蓋寫入,追加寫入)的方法詳解

    這篇文章主要介紹了PHP創(chuàng)建文件及寫入數(shù)據(jù)(覆蓋寫入,追加寫入)的方法,結(jié)合實(shí)例形式總結(jié)分析了php文件創(chuàng)建、寫入操作相關(guān)函數(shù)使用技巧,需要的朋友可以參考下
    2019-02-02
  • SESSION存放在數(shù)據(jù)庫(kù)用法實(shí)例

    SESSION存放在數(shù)據(jù)庫(kù)用法實(shí)例

    這篇文章主要介紹了SESSION存放在數(shù)據(jù)庫(kù)用法,自定義了一個(gè)簡(jiǎn)單的針對(duì)數(shù)據(jù)操作的session類并給出了使用該類存儲(chǔ)到數(shù)據(jù)庫(kù)的相關(guān)技巧,需要的朋友可以參考下
    2015-08-08
  • php 圖片上添加透明度漸變的效果

    php 圖片上添加透明度漸變的效果

    今天因?yàn)榕R時(shí)需要,要?jiǎng)討B(tài)的在圖片上添加透明度漸變的效果,在網(wǎng)上找了半天沒有相應(yīng)功能的算法....
    2009-06-06
  • 淺談php錯(cuò)誤提示及查錯(cuò)方法

    淺談php錯(cuò)誤提示及查錯(cuò)方法

    本文給大家簡(jiǎn)單總結(jié)了下php的3種錯(cuò)誤提示和3種查錯(cuò)的方法,非常簡(jiǎn)單,記錄一下,以后補(bǔ)全,有需要的小伙伴先來MARK下吧
    2015-07-07
  • 關(guān)于BIG5-HKSCS的解決方法

    關(guān)于BIG5-HKSCS的解決方法

    關(guān)于BIG5-HKSCS的解決方法...
    2007-03-03

最新評(píng)論