<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                >迭代模式(Iterator Pattern):迭代器模式可幫組構造特定的對象,那些對象能夠提供單一的標準接口循環或迭代任何類型的可計數數據。 ## (一)為什么需要迭代模式 1,我們想要向遍歷數組那樣,遍歷對象,或是遍歷一個容器。 2,迭代器模式可以隱藏遍歷元素所需的操作- ## (二)迭代模式 UML圖 ![](https://box.kancloud.cn/805d1d835f40748d4906e0032ec74e34_884x605.png) 上圖是截取了《PHP設計模式》中迭代器的UML圖,僅供參考。在PHP中我們對迭代模式的使用,通常只需實現Iterator接口即可。 下圖給出實現 Interator接口 所需實現的方法 ![](https://box.kancloud.cn/44e751f93a94040d18efb8de1114ed78_850x347.png) ## (三)簡單實例 現在我們把一個類當做一個容器,讓其實現Iterator接口,使其可以被遍歷。 <?php class ArrayContainer implements Iterator { protected $data = array(); protected $index ; public function __construct($data) { $this->data = $data; } //返回當前指針指向數據 public function current() { return $this->data[$this->index]; } //指針+1 public function next() { $this->index ++; } //驗證指針是否越界 public function valid() { return $this->index < count($this->data); } //重置指針 public function rewind() { $this->index = 0; } //返回當前指針 public function key() { return $this->index; } } //初始化數組容器 $arr = array(0=>'唐朝',1=>'宋朝',2=>'元朝'); $container = new ArrayContainer($arr); //遍歷數組容器 foreach($container as $a => $dynasty){ echo '如果有時光機,我想去'.$dynasty.PHP_EOL; } 迭代器其實也類似于數據庫的游標,可以在容器內上下翻滾,遍歷它所需要查看的元素。 通過實現Iterator接口,我們就可以把一個對象里的數據當一個數組一樣遍歷。也許你會說我把一個數組直接遍歷不就行了嗎,為什么你還要把數組扔給容器對象,再遍歷容器對象呢?是這樣的,通過容器對象,我們可以隱藏我們foreach的操作。比如說,我想遍歷時,一個元素輸出,一個元素不輸出怎么辦呢?利用迭代器模式,你只需把容器對象中的next方法中的index++語句改為index+=2即可。這點,你可以試試。 為何實現一個Iterator接口就必須實現current那些方法呢?其實foreach容器對象的時候,PHP是自動幫我們依次調用了,valid,next這些方法。具體的調用順序,還有Iterator接口的實現,其實是屬于SPL(Standard PHP Library)的內容。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看