PHP5.5迭代產生器用法執行個體詳解,php5.5產生器_PHP教程

來源:互聯網
上載者:User

PHP5.5迭代產生器用法執行個體詳解,php5.5產生器


本文執行個體講述了PHP5.5迭代產生器用法。分享給大家供大家參考,具體如下:

PHP5.5引入了迭代產生器的概念,迭代的概念早就在PHP有了,但是迭代產生器是PHP的一個新特性,這跟python3中的迭代產生器類似,看看PHP5.5的迭代產生器如何定義。

<?phpfunction 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官網的例子:

<?phpfunction 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設計模式之迭代器模式的深入解析

http://www.bkjia.com/PHPjc/1111343.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1111343.htmlTechArticlePHP5.5迭代產生器用法執行個體詳解,php5.5產生器 本文執行個體講述了PHP5.5迭代產生器用法。分享給大家供大家參考,具體如下: PHP5.5引入了迭代生...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.