首頁 > 後端開發 > php教程 > php生成器簡介和範例

php生成器簡介和範例

伊谢尔伦
發布: 2016-11-23 09:11:56
原創
1225 人瀏覽過

注意:PHP5.5以上版本才支援生成器。

產生器提供了一種更容易的方法來實現簡單的物件迭代,但沒有實作一個具有 Iterator 介面的類別所帶來的效能開銷和複雜性。

生成器允許你在 foreach 代碼塊中寫代碼來迭代一組數據而不需要在內存中創建一個數組, 那會使你的內存達到上限,或者會佔據可觀的處理時間。相反,你可以寫一個生成器函數,就像一個普通的自定義函數一樣, 和普通函數只返回一次不同的是, 生成器可以根據需要 yield 多次,以便生成需要迭代的值。

一個簡單的例子就是使用生成器來重新實作 range() 函數。 標準的 range() 函數需要為其中的每一個回傳值在記憶體中產生一個陣列, 結果就是產生一個很大的陣列。 例如,呼叫 range(0, 1000000) 將導致記憶體佔用超過 100 MB。

做為一種替代方法, 我們可以實現一個 xrange() 生成器, 只需要足夠的內存來創建 Iterator 對象並在內部跟踪生成器的當前狀態,這樣只需要不到1K字節的內存。

Example #1 將 range() 實作為生成器

<?php
    function xrange($start, $limit, $step = 1) {
        if ($start < $limit) {
            if ($step <= 0) {
                throw new LogicException(&#39;step必须是正数&#39;);
            }
            for ($i = $start; $i <= $limit; $i += $step) {
                yield $i;
            }
        } else {
            if ($step >= 0) {
                throw new LogicException(&#39;step必须是负数&#39;);
            }
            for ($i = $start; $i >= $limit; $i += $step) {
                yield $i;
            }
        }
    }
    /* 注意range() 和 xrange() 的结果在下面的统一输出中. */
    echo &#39;来自range()的单个奇数: &#39;;
    foreach (range(1, 9, 2) as $number) {
        echo "$number ";
    }
    echo "\n";
    echo &#39;来自xrange()的单个奇数 &#39;;
    foreach (xrange(1, 9, 2) as $number) {
        echo "$number ";
    }
?>
登入後複製

以上程式會輸出:

Single digit odd numbers from range():  1 3 5 7 9 
Single digit odd numbers from xrange(): 1 3 5 7 9
登入後複製


相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板