回答: 生成器和迭代器是一種特殊函數和對象,可以逐一生成值,無需儲存整個資料集。生成器: 產生一系列值,每次呼叫產生一個值;迭代器: 提供存取集合元素的方法,遍歷時產生一個元素;實戰: 用於分頁,逐頁產生資料集,無需將整個資料集儲存在內存中。
PHP進階特性:生成器與迭代器的妙用
##產生器
生成器是一個用來產生一系列值的特殊函數。與常規函數不同,生成器可以在每次呼叫時產生一個值,而無需將整個值數組儲存在記憶體中。function numbersGenerator() { for ($i = 1; $i <= 10; $i++) { yield $i; } } foreach (numbersGenerator() as $number) { echo $number . "\n"; }
迭代器
迭代器是一種對象,提供了一種存取集合中元素的方法。與生成器類似,迭代器可以在遍歷集合時產生一個元素,而無需將整個集合儲存在記憶體中。class NumberIterator implements Iterator { private $start; private $end; private $current; public function __construct($start, $end) { $this->start = $start; $this->end = $end; $this->current = $start; } public function rewind() { $this->current = $this->start; } public function current() { return $this->current; } public function key() { return $this->current; } public function next() { $this->current++; } public function valid() { return $this->current <= $this->end; } } $iterator = new NumberIterator(1, 10); foreach ($iterator as $number) { echo $number . "\n"; }
實戰案例:分頁器
生成器和迭代器非常適合分頁場景。透過使用生成器或迭代器,我們可以逐頁產生資料集,而無需將整個資料集儲存在記憶體中。function paginate($query, $pageSize) { $page = 1; while (true) { $offset = ($page - 1) * $pageSize; $results = $query->offset($offset)->limit($pageSize)->execute(); if (count($results) === 0) { break; } yield $results; $page++; } } foreach (paginate($query, 10) as $page) { echo "Page $page\n"; foreach ($page as $result) { // Process the result } }
以上是PHP進階特性:生成器與迭代器的妙用的詳細內容。更多資訊請關注PHP中文網其他相關文章!