PHP 生成器Generators的入門理解和學習

2021-09-25 17:38:32 字數 1214 閱讀 4560

什麼是生成器generators

生成器允許你在 foreach **塊中寫**來迭代一組資料而不需要在記憶體中建立乙個陣列, 那會使你的記憶體達到上限,或者會佔據可觀的處理時間。相反,你可以寫乙個生成器函式,就像乙個普通的自定義函式一樣, 和普通函式只返回一次不同的是, 生成器可以根據需要 yield 多次,以便生成需要迭代的值。

乙個簡單的例子就是使用生成器來重新實現 range() 函式。 標準的 range() 函式需要在記憶體中生成乙個陣列包含每乙個在它範圍內的值,然後返回該陣列, 結果就是會產生多個很大的陣列。 比如,呼叫 range(0, 10000) 將導致記憶體占用超過 4 mb。

例子**

<?php

/** * created by phpstorm.

* user: [email protected]

* date: 2018/7/30

* time: 上午11:29

*/$start = xdebug_memory_usage();

$num = 10000;

function rangewithgenerators($start, $limit, $step = 1)

for ($i = $start; $i <= $limit; $i += $step) } else

for ($i = $start; $i >= $limit; $i += $step)

}}if ($argc === 1)

//var_dump(iterator_to_array($iterate));

}if ($argc === 2)

}$end = xdebug_memory_usage();

echo sprintf("記憶體消耗量%s\n", convert($end-$start));

function convert($size)

環境

執行命令

測試結果論述

foreach迴圈該generators,本例子中則使用該方法讀取generators。

php標準函式iterator_to_array(),該函式將generators轉換為乙個array。

使用場景,可查閱參考資料2

PHP 生成器Generator理解

寄凡 風雪之隅 php手冊 生成器 generator 引用自官網 生成器提供了一種更容易的方法來實現簡單的物件迭代,相比較定義類實現iterator介面的方式,效能開銷和複雜性大大降低。生成器允許你在foreach 塊中寫 來迭代一組資料而不需要在記憶體中建立乙個陣列,那會使你的記憶體達到上限 劃...

Generator生成器基礎

生成器函式是es6提供的一種非同步程式設計解決方案,語法行為與傳統函式完全不同 function gen let iterator gen console.log iterator 不會輸出hello 是乙個迭代器物件 需要呼叫next方法才會輸出 iterator.next 輸出結果 yield相...

php的Generator生成器及yield

官方文件 生成器提供了一種更容易的方法來實現簡單的物件迭代,相比較定義類實現iterator介面的方式,效能開銷和複雜性大大降低。生成器允許你在foreach 塊中寫 來迭代一組資料而不需要在記憶體中建立乙個陣列,那會使你的記憶體達到上限,或者會佔據可觀的處理時間。相反,你可以寫乙個生成器函式,就像...