一.迭代器
分析:想一下,如果把集合對象和對集合對象的操作放在一起,當我們想換一種方式遍歷集合對象中元素時,就需要修改集合對象了,違背“單一職責原則”,而迭代器模式將數據結構和數據結構的算法分離開,兩者可獨立發展。
優點:
1.支持多種遍歷方式。比如有序列表,我們根據需要提供正序遍歷、倒序遍歷兩種迭代器。用戶只需要得到我們的迭代器,就可以對集合執行遍歷操作
2.簡化了聚合類。由于引入了迭代器,原有的集合對象不需要自行遍歷集合元素了
3.增加新的聚合類和迭代器類很方便,兩個維度上可各自獨立變化
4.為不同的集合結構提供一個統一的接口,從而支持同樣的算法在不同的集合結構上操作
缺點:
1.迭代器模式將存儲數據和遍歷數據的職責分離增加新的集合對象時需要增加對應的迭代器類,類的個數成對增加,在一定程度上增加系統復雜度
具體接口:
Iterator extends Traversable {/* 方法 */abstract html' target='_blank'>public mixed current ( void )abstract public scalar key ( void )abstract public void next ( void )abstract public void rewind ( void )abstract public bool valid ( void )}
二.生成器
PHP生成器(generator)是PHP5.5.0引入的功能,與標準的PHP迭代器不同,PHP生成器不要求類實現Iterator接口,從而減輕了類的負擔,生成器會根據需求計算并產出要迭代的值,這對性能有重大的影響試想一下假如標準的PHP迭代器經常在內存中執行迭代操作者要預先計算出數據集性能低下;如果要使用特定的的方式對計算大量數據,對性能的影響更甚。此時我們可以使用生成器,即時計算產出后續值不占用寶貴的內存資源。
優點:占用內存少對,性能好。每次產出一個值之后,生成器的內部狀態都會停頓;當生成器請求下一個值時,內部狀態又會恢復。生成器的內部一直在停頓和恢復之間切換,直到循環完成或停頓位置
缺點:
1.PHP生成器不能滿足所有迭代器的需求,因為如果不查詢,生成器永遠不知道下一個要迭代的值是什么,在生成器中無法后退或前進。
2.生成器還是一次性的,無法多次迭代同一個生成器,不過,如果需要,可以重建或克隆生成器。
創建生成器:
1.因為生成器就是PHP函數,生成器就是在函數中使用yield關鍵字。與普通的PHP函數不同的是,生產器從不返回值,只產出值。
?phpfunction myGenerator(){ yield a yield b yield c }
2.調用生成器函數時,PHP會返回一個屬于Generator類的對象。這個對象可以使用foreach()函數迭代。每次迭代,PHP會要求Generator實例計算并提供下一個要迭代的值
?phpfunction makeRange($length){ for($i = 0; $i $length; $i++){ yield $i;foreach(makeRange(1000000) as $i){ echo $i,PHP_EOL;}
如上所示:當$length 很大時(上百萬),而且你同時沒有使用生成器的話,那么就要預先為一個由一百萬上一千五個整數組成的數組分配內存。而PHP生成器能實現相同的操作,不過一次只會為一個整數分配內存
相關推薦:
php使用位運算實現整數的加減乘除并測試(代碼示例)
PHP和html表單之間實現簡單交互的代碼
以上就是PHP中迭代器以及生成器的分析以及優缺點的介紹的詳細內容,PHP教程
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答