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

        詳細介紹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號
        主站蜘蛛池模板: 精品久久久久久无码免费| 亚洲精品偷拍视频免费观看| 久久久WWW免费人成精品| 国产精品国色综合久久| 欧美成人精品第一区二区| 欧美精品一区二区三区视频| 少妇人妻无码精品视频app| 久久国产午夜精品一区二区三区| 欧美亚洲国产精品久久蜜芽| 国产午夜精品久久久久免费视| 一本之道av不卡精品| 惠民福利中文字幕人妻无码乱精品| 2020久久精品国产免费| 老司机亚洲精品影院| 亚洲精品乱码久久久久久不卡| 国产麻豆精品入口在线观看| 欧美精品免费观看二区| 国产成人精品电影在线观看| 少妇人妻偷人精品无码视频新浪| 青春草无码精品视频在线观| 国产欧美一区二区精品性色99 | 久久99国产精品久久久 | 国产成人精品一区二区三区| 99国产精品一区二区| 久久精品国产亚洲精品2020| 无码国产精品一区二区免费模式| 亚洲精品成人片在线观看| 亚欧洲精品在线视频免费观看 | 91精品国产乱码久久久久久| 久久发布国产伦子伦精品| 日韩精品少妇无码受不了| 午夜精品久久久久久中宇| 亚洲永久精品ww47| 亚洲国产精品福利片在线观看| 亚洲爆乳无码精品AAA片蜜桃| 久久久不卡国产精品一区二区| 久久99国产精品成人欧美| 久久996热精品xxxx| 久久精品亚洲乱码伦伦中文| 人妻少妇看A偷人无码精品| 欧美精品黑人粗大|