創建一個生成器非常簡單。你只需要像定義普通函數一樣定義它,但是使用yield
關鍵字來產出值。例如,以下是一個簡單的斐波那契數列生成器:
function fibonacci() {$num1 = 0;$num2 = 1;while (true) {yield $num1;$temp = $num1 + $num2;$num1 = $num2;$num2 = $temp;}
}
在這個例子中,每次調用fibonacci()
函數都會生成一個新的斐波那契數列迭代器。你可以使用foreach
循環來遍歷生成器產生的值。
生成器的強大之處在于它們的延遲計算特性。這意味著只有當你需要下一個值時,生成器才會計算它。這對于處理無限序列或非常大的數據集非常有用,因為它避免了一次性加載所有數據到內存中的需求。
除了簡單的值產生之外,生成器還可以用于更復雜的操作,如數據處理和轉換。例如,假設我們有一個包含用戶信息的數組,我們想要從中提取出用戶名,并將每個用戶名的第一個字母轉換為大寫。我們可以創建一個生成器來完成這個任務:
$users = [/* 大量的用戶數據 */];function capitalizeNames($users) {foreach ($users as $user) {yield strtoupper($user['name'][0]) . substr($user['name'], 1);}
}
通過這種方式,我們可以在不創建中間數組的情況下對數據進行轉換,從而節省內存并提高性能。