站長資訊網
        最全最豐富的資訊網站

        詳細介紹php迭代器的作用

        詳細介紹php迭代器的作用

        我們來想一下,如果把集合對象和對集合對象的操作放在一起,當我們想換一種方式遍歷集合對象中元素時,就需要修改集合對象了,違背“單一職責原則”,而迭代器模式將數據結構和數據結構的算法分離開,兩者可獨立發展。

        php迭代器(Iterator)的作用:

        允許對象以自己的方式迭代內部的數據,從而使它可以被循環訪問,Iterator接口摘要如下:

        Iterator extends Traversable {   //返回當前索引游標指向的元素   abstract public mixed current ( void )   //返回當前索引游標指向的鍵   abstract public scalar key ( void )   //移動當前索引游標到下一元素   abstract public void next ( void )   //重置索引游標   abstract public void rewind ( void )   //判斷當前索引游標指向的元素是否有效   abstract public boolean valid ( void ) }

        迭代器優缺點分析:

        優點

        1.支持多種遍歷方式。比如有序列表,我們根據需要提供正序遍歷、倒序遍歷兩種迭代器。用戶只需要得到我們的迭代器,就可以對集合執行遍歷操作

        2.簡化了聚合類。由于引入了迭代器,原有的集合對象不需要自行遍歷集合元素了

        3.增加新的聚合類和迭代器類很方便,兩個維度上可各自獨立變化

        4.為不同的集合結構提供一個統一的接口,從而支持同樣的算法在不同的集合結構上操作

        缺點:

        迭代器模式將存儲數據和遍歷數據的職責分離增加新的集合對象時需要增加對應的迭代器類,類的個數成對增加,在一定程度上增加系統復雜度。

        下面是一個簡單的例子演示Iterator的使用方法:

        <?php /**  * 該類允許外部迭代自己內部私有屬性$_test,并演示迭代過程  *  * @author 瘋狂老司機  */ class TestIterator implements Iterator {   /*    * 定義要進行迭代的數組    */   private $_test = array('dog', 'cat', 'pig');   /*    * 索引游標    */   private $_key = 0;   /*    * 執行步驟    */   private $_step = 0;   /**    * 將索引游標指向初始位置    *    * @see TestIterator::rewind()    */   public function rewind() {     echo '第'.++$this->_step.'步:執行 '.__METHOD__.'<br>';     $this->_key = 0;   }   /**    * 判斷當前索引游標指向的元素是否設置    *    * @see TestIterator::valid()    * @return bool    */   public function valid() {     echo '第'.++$this->_step.'步:執行 '.__METHOD__.'<br>';     return isset($this->_test[$this->_key]);   }   /**    * 將當前索引指向下一位置    *    * @see TestIterator::next()    */   public function next() {     echo '第'.++$this->_step.'步:執行 '.__METHOD__.'<br>';     $this->_key++;   }   /**    * 返回當前索引游標指向的元素的值    *    * @see TestIterator::current()    * @return value    */   public function current() {     echo '第'.++$this->_step.'步:執行 '.__METHOD__.'<br>';     return $this->_test[$this->_key];   }   /**    * 返回當前索引值    *    * @return key    * @see TestIterator::key()    */   public function key() {     echo '第'.++$this->_step.'步:執行 '.__METHOD__.'<br>';     return $this->_key;   } } $iterator = new TestIterator(); foreach($iterator as $key => $value){   echo "輸出索引為{$key}的元素".":$value".'<br><br>'; } ?>

        以上例子將輸出:

        第1步:執行 TestIterator::rewind 第2步:執行 TestIterator::valid 第3步:執行 TestIterator::current 第4步:執行 TestIterator::key 輸出索引為0的元素:dog 第5步:執行 TestIterator::next 第6步:執行 TestIterator::valid 第7步:執行 TestIterator::current 第8步:執行 TestIterator::key 輸出索引為1的元素:cat 第9步:執行 TestIterator::next 第10步:執行 TestIterator::valid 第11步:執行 TestIterator::current 第12步:執行 TestIterator::key 輸出索引為2的元素:pig 第13步:執行 TestIterator::next 第14步:執行 TestIterator::valid

        從以上例子可以看出,如果執行valid返回false,則循環就此結束。

        相了解

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 亚洲欧美日韩久久精品| 久久久亚洲精品蜜桃臀| 91精品婷婷国产综合久久| 在线精品亚洲一区二区小说 | 亚洲精品线在线观看| 久久精品一区二区| 亚洲av无码乱码国产精品| 精品久人妻去按摩店被黑人按中出| avtt天堂网久久精品| 亚洲AV无码精品色午夜果冻不卡 | 麻豆亚洲AV永久无码精品久久| 国产亚洲精品a在线观看| 久久99国产精品久久久 | 国产成人A人亚洲精品无码| 午夜精品乱人伦小说区| 日韩精品欧美| 欧美精品在线视频| 久久成人国产精品一区二区| 99久久免费国产精品| 久久精品人人做人人爽电影| 成人国产精品一区二区网站| 91精品欧美综合在线观看| 久久亚洲中文字幕精品有坂深雪 | 一级成人精品h| 久久综合九色综合精品| 69堂国产成人精品视频不卡| 国产日韩精品欧美一区喷水| 人妻少妇精品视频一区二区三区| 亚洲精品国产日韩无码AV永久免费网| 国产成人精品日本亚洲18图| 国产精品亚洲片在线观看不卡 | 久久精品成人欧美大片| 国产999精品久久久久久| 亚洲国产精品久久66| 日本精品不卡视频| 久久久久夜夜夜精品国产| 华人在线精品免费观看| 国产精品高清视亚洲精品| 久久久精品午夜免费不卡| 91在线手机精品超级观看| 99re66在线观看精品免费|