php yield

qq_35370923發表於2019-01-28

參考資料:https://www.cnblogs.com/zuochuang/p/8176868.html
yield即迭代器,我的理解就是當你需要進行一些迴圈性質的非常吃記憶體的操作時,可以使用它。

比如讀取一個非常大的檔案,先要一次性把所有內容放進記憶體中。一般我們的操作是這樣的。

$handle = fopen("/Users/artist/Downloads/11121487.txt", 'rb');

while (feof($handle)===false) {

    $value = fgets($handle);
    //一系列操作
}

fclose($handle);

當檔案過大你可以加上一句ini_set('memory_limit', '-1');代表記憶體使用量不受限制,但是萬一檔案很大,伺服器可能就當機了。當使用迭代器yield就完美解決這一問題。

function readTxt()
{
  
    $handle = fopen("/Users/artist/Downloads/11121487.txt", 'rb');

    while (feof($handle)===false) {
       
        yield fgets($handle);
    }

    fclose($handle);
}

foreach (readTxt() as $key => $value) {
  
     //一系列操作
}

至於yield原理什麼的,歡迎去https://www.cnblogs.com/zuochuang/p/8176868.html檢視。

相關文章