<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 迭代器 ## 迭代生成器 (迭代)生成器也是一個函數,不同的是這個函數的返回值是依次返回,而不是只返回一個單獨的值.或者,換句話說,生成器使你能更方便的實現了迭代器接口.下面通過實現一個xrange函數來簡單說明: ```php <?php function xrange($start, $end, $step = 1) { for ($i = $start; $i <= $end; $i += $step) { yield $i; } } foreach (xrange(1, 1000000) as $num) { echo $num, "\n"; } ``` 上面這個xrange()函數提供了和PHP的內建函數range()一樣的功能.但是不同的是range()函數返回的是一個包含值從1到100萬0的數組(注:請查看手冊). 而xrange()函數返回的是依次輸出這些值的一個迭代器, 而不會真正以數組形式返回. 這種方法的優點是顯而易見的.它可以讓你在處理大數據集合的時候不用一次性的加載到內存中.甚至你可以處理無限大的數據流. 當然,也可以不同通過生成器來實現這個功能,而是可以通過繼承Iterator接口實現.但通過使用生成器實現起來會更方便,不用再去實現iterator接口中的5個方法了. ##生成器為可中斷的函數 要從生成器認識協程, 理解它內部是如何工作是非常重要的: 生成器是一種可中斷的函數, 在它里面的yield構成了中斷點. 還是看上面的例子, 調用xrange(1,1000000)的時候, xrange()函數里代碼其實并沒有真正地運行. 它只是返回了一個迭代器: ```php <?php $range = xrange(1, 1000000); var_dump($range); // object(Generator)#1 var_dump($range instanceof Iterator); // bool(true) ?> ``` 這也解釋了為什么xrange叫做迭代生成器, 因為它返回一個迭代器, 而這個迭代器實現了Iterator接口. 調用迭代器的方法一次, 其中的代碼運行一次.例如, 如果你調用$range->rewind(), 那么xrange()里的代碼就會運行到控制流第一次出現yield的地方. 而函數內傳遞給yield語句的返回值可以通過$range->current()獲取. 為了繼續執行生成器中yield后的代碼, 你就需要調用$range->next()方法. 這將再次啟動生成器, 直到下一次yield語句出現. 因此,連續調用next()和current()方法, 你就能從生成器里獲得所有的值, 直到再沒有yield語句出現. 對xrange()來說, 這種情形出現在$i超過$end時. 在這中情況下, 控制流將到達函數的終點,因此將不執行任何代碼.一旦這種情況發生,vaild()方法將返回假, 這時迭代結束.
                  <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>

                              哎呀哎呀视频在线观看