前言
本文為《現代 PHP》一書的學習筆記。
環境
- Windows 10
- XAMPP 3.2.2
產生器
產生器(Generator)在需要的時刻計算並產生運算後的數値,避免占用寶貴的記憶體空間。
產生器的例子如下:
1 | function myGenerator() { |
範例 2-16:Range 產生器(不良示範)
1 | function makeRange($length) { |
- 此範例宣告了一個
$dataset
陣列並配置了一百萬個整數的記憶體空間。
範例 2-17:Range 產生器(良好示範)
1 | function makeRange($length) { |
產生器只是一個使用數次
yield
關鍵字的 PHP 函式,沒有回傳値。
假如需要疊代一個 4 GB 的逗號分隔値(CSV),但是虛擬私人主機只有 1 GB 的可用記憶體,此時將需要使用到產生器。
範例 2-18:CSV 產生器
1 | function getRows($file) { |
fopen()
函數用來打開一個文件。feof()
函數用來檢測是否已到達文件末尾。fgetcsv()
函數用來解析 CSV 字段。fclose()
函數用來關閉一個文件。
產生器是只能往前的疊代器,無法用來倒帶、快轉或搜尋資料群集。
參考資料
- Josh Lockhart(2015)。現代 PHP。台北市:碁峯資訊。