中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP5.5迭代生成器怎么用

發布時間:2021-08-31 11:36:50 來源:億速云 閱讀:86 作者:小新 欄目:開發技術

這篇文章主要介紹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。所以上面的這個例子就能理解了。

以上是“PHP5.5迭代生成器怎么用”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

四会市| 武安市| 互助| 涞水县| 平潭县| 全椒县| 贡觉县| 汝城县| 乾安县| 乌拉特中旗| 固始县| 张家港市| 广灵县| 潼关县| 郎溪县| 长宁县| 冷水江市| 长治市| 武山县| 凤冈县| 大安市| 和静县| 萍乡市| 依安县| 东丽区| 汕尾市| 盐源县| 黄龙县| 桐城市| 乌鲁木齐县| 滨海县| 余干县| 新乡县| 壶关县| 遵义市| 临江市| 高碑店市| 石嘴山市| 剑阁县| 定南县| 从化市|