最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP5.5迭代生成器用法實例詳解

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

本文實例講述了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";
}

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

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

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

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

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

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

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

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

相關(guān)文章

  • php的日期處理函數(shù)及uchome的function_coomon中日期處理函數(shù)的研究

    php的日期處理函數(shù)及uchome的function_coomon中日期處理函數(shù)的研究

    經(jīng)常在用php的時候會碰到一個關(guān)于時間日期的問題還有時區(qū)差異的問題,以前作項目的時候會把時間搞錯,要么就是提前八小時了,要么那個時間就是驢唇不對馬嘴的,現(xiàn)在我就來深入研究一下這里面的各個函數(shù)及其用法
    2011-01-01
  • php 接口類與抽象類的實際作用

    php 接口類與抽象類的實際作用

    很多人搞不清楚接口和抽象類的區(qū)別!下面我把我的理解與大家共享!
    2009-11-11
  • php JWT在web端中的使用方法教程

    php JWT在web端中的使用方法教程

    這篇文章主要給大家介紹了關(guān)于php JWT在web端中的使用方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • 深入解析PHP中SESSION反序列化機制

    深入解析PHP中SESSION反序列化機制

    這篇文章主要介紹了PHP中SESSION反序列化機制的相關(guān)資料,文中介紹的非常相信,相信對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。
    2017-03-03
  • PHP中防SQL注入的主要方法

    PHP中防SQL注入的主要方法

    PHP中防止SQL注入的主要方法旨在確保用戶輸入被安全地處理,從而防止攻擊者通過SQL注入漏洞來操縱數(shù)據(jù)庫,本文給大家介紹了PHP中防SQL注入的主要方法,需要的朋友可以參考下
    2024-10-10
  • php處理單文件、多文件上傳代碼分享

    php處理單文件、多文件上傳代碼分享

    這篇文章主要為大家詳細介紹了php處理單文件、多文件上傳代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • php使用get_class_methods()函數(shù)獲取分類的方法

    php使用get_class_methods()函數(shù)獲取分類的方法

    這篇文章主要介紹了php使用get_class_methods()函數(shù)獲取分類的方法,結(jié)合實例形式分析了get_class_methods()函數(shù)獲取類中成員方法的使用技巧,需要的朋友可以參考下
    2016-07-07
  • PHP實現(xiàn)重載的常用方法實例詳解

    PHP實現(xiàn)重載的常用方法實例詳解

    這篇文章主要介紹了PHP實現(xiàn)重載的常用方法,結(jié)合實例形式對比java分析了php實現(xiàn)重載的四種常見實現(xiàn)技巧,需要的朋友可以參考下
    2017-10-10
  • PHP實現(xiàn)遞歸無限級分類

    PHP實現(xiàn)遞歸無限級分類

    這篇文章主要介紹了PHP實現(xiàn)遞歸無限級分類的方法,具有一定的參考價值,需要的朋友可以參考下
    2015-10-10
  • PHP實現(xiàn)上傳多圖即時顯示與即時刪除的方法

    PHP實現(xiàn)上傳多圖即時顯示與即時刪除的方法

    這篇文章主要介紹了PHP實現(xiàn)上傳多圖即時顯示與即時刪除的方法,結(jié)合實例形式分析了php針對圖片文件的預(yù)覽、上傳及刪除相關(guān)操作技巧,需要的朋友可以參考下
    2017-05-05

最新評論

随州市| 广河县| 遂溪县| 潼关县| 于都县| 延川县| 阜新市| 定兴县| 贵南县| 天镇县| 启东市| 宝兴县| 勃利县| 永年县| 阳江市| 合水县| 长岛县| 鲁甸县| 晋宁县| 乌鲁木齐市| 富平县| 牟定县| 镇赉县| 开平市| 大渡口区| 新沂市| 新田县| 渑池县| 陆河县| 永胜县| 扶绥县| 惠来县| 金川县| 宁国市| 斗六市| 南陵县| 丰城市| 怀宁县| 灵山县| 东方市| 东辽县|