欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

php生成器詳細講解

 更新時間:2022年11月02日 15:56:17   作者:huaweichenai  
生成器提供了一種更容易的方法來實現(xiàn)簡單的對象迭代,相比較定義類實現(xiàn)?Iterator?接口的方式,性能開銷和復(fù)雜性大大降低。生成器允許你在?foreach?代碼塊中寫代碼來迭代一組數(shù)據(jù)而不需要在內(nèi)存中創(chuàng)建一個數(shù)組

一、生成器的概念

生成器提供了一種更容易的方法來實現(xiàn)簡單的對象迭代,生成器允許你在 foreach 代碼塊中寫代碼來迭代一組數(shù)據(jù)而不需要在內(nèi)存中創(chuàng)建一個數(shù)組, 那會使你的內(nèi)存達到上限,或者會占據(jù)可觀的處理時間。相反,你可以寫一個生成器函數(shù),就像一個普通的自定義函數(shù)一樣, 和普通函數(shù)只返回一次不同的是, 生成器可以根據(jù)需要 yield 多次,以便生成需要迭代的值。

二、生成器的優(yōu)點

1、生成器會對PHP應(yīng)用的性能有非常大的影響

2、PHP代碼運行時節(jié)省大量的內(nèi)存

3、比較適合計算大量的數(shù)據(jù)

三、生成器語法

生成器函數(shù)的核心是yield關(guān)鍵字。它最簡單的調(diào)用形式看起來像一個return申明,不同之處在于普通return會返回值并終止函數(shù)的執(zhí)行,而yield會返回一個值給循環(huán)調(diào)用此生成器的代碼并且只是暫停執(zhí)行生成器函數(shù)。

四、生成器的簡單實例

我們都知道php中有一個range函數(shù),他的作用是創(chuàng)建一個包含指定范圍的元素的數(shù)組,他的基本語法為range(low,high,step),表示包含從 low 到 high (包含 low 和 high)之間的整數(shù)或字符。如果 high 比 low 小,則返回反序的數(shù)組,step表示步長默認(rèn)步長為1

例如:

range(0,10)

輸出結(jié)果為:

Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 7 [8] => 8 [9] => 9 [10] => 10 )

但是如果我們想要獲取1-10000000之間所有的數(shù)組的話,調(diào)用range(0,10000000)時將導(dǎo)致占用內(nèi)存耗盡

這時候我們就可以使用php的生成器來實現(xiàn)

1)編寫一個生成器函數(shù)

public function rangeText($start, $limit, $step = 1)
{
    if ($start < $limit) {
        if ($step <= 0) {
            throw new InvalidConfigException('步長至少大于0');
        }
        for ($i = $start; $i <= $limit; $i += $step) {
            yield $i;
        }
    } else {
        if ($step >= 0) {
            throw new InvalidConfigException('步長至少大于0');
        }
        for ($i = $start; $i >= $limit; $i += $step) {
            yield $i;
        }
    }
}

2)調(diào)用生成器函數(shù)

foreach ($this->rangeText(0,10000000) as $number) {
    echo $number .'<br />';
}

調(diào)用生成函數(shù)之后我們就可以將0-10000000之間的所有數(shù)打印出來

五、生成器簡單實際應(yīng)用

PHP開發(fā)很多時候都要讀取大文件,比如csv文件、text文件,或者一些日志文件。這些文件如果很大,比如10個G。這時,直接一次性把所有的內(nèi)容讀取到內(nèi)存中計算不太現(xiàn)實。那么這里生成器就可以派上用場

例:使用生成器讀取txt文件

1)編寫一個讀取txt文件的生成器函數(shù)

public function readTest($txt)
{
    //打開文件
    $handle = fopen($txt, 'rb');
    //檢測是否已到達文件末尾
    while (feof($handle)===false) {
        //使用生成器逐行讀取文件數(shù)據(jù)
        yield   fgets($handle);
    }
    //關(guān)閉打開的文件
    fclose($handle);
}

2)調(diào)用讀取txt文件的生成器函數(shù)

foreach ($this->readTest('test.txt') as $key=>$value) {
    echo $value.'<br />';
}

這時候我們就可以在瀏覽器看到txt文件中內(nèi)容了

到此這篇關(guān)于php生成器詳細講解的文章就介紹到這了,更多相關(guān)php生成器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 常用的PHP加密解密函數(shù)分享

    常用的PHP加密解密函數(shù)分享

    項目中有時我們需要使用PHP將特定的信息進行加密,也就是通過加密算法生成一個加密字符串,這個加密后的字符串可以通過解密算法進行解密,本文給大家分享了一些比較經(jīng)典的PHP加密解密函數(shù)代碼,需要的朋友可以參考下
    2023-09-09
  • PHP框架Laravel的小技巧兩則

    PHP框架Laravel的小技巧兩則

    這篇文章主要介紹了PHP框架Laravel的小技巧兩則,本文講解了Route::controller中路由批量命名、根據(jù)系統(tǒng)變量判斷當(dāng)前運行環(huán)境兩個小技巧,需要的朋友可以參考下
    2015-02-02
  • PHP三層結(jié)構(gòu)(下) PHP實現(xiàn)AOP

    PHP三層結(jié)構(gòu)(下) PHP實現(xiàn)AOP

    讓我們把注意力集中到中間服務(wù)層上來。中間服務(wù)層代碼比較簡單,只是調(diào)用數(shù)據(jù)訪問層代碼將留言保存到數(shù)據(jù)庫。
    2010-07-07
  • 分享PHP守護進程類

    分享PHP守護進程類

    這篇文章主要介紹了PHP守護進程類,守護進程(Daemon)是運行在后臺的一種特殊進程。它獨立于控制終端并且周期性地執(zhí)行某種任務(wù)或等待處理某些發(fā)生的事件。守護進程是一種很有用的進程。php也可以實現(xiàn)守護進程的功能,需要的朋友可以參考下
    2015-12-12
  • PHP Session 變量的使用方法詳解與實例代碼

    PHP Session 變量的使用方法詳解與實例代碼

    在php中Session經(jīng)常用來驗證用戶注冊或登錄之后的驗證了,下面我來總結(jié)session變量的一些常用實例與用法介紹
    2013-09-09
  • php中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之間的區(qū)別

    php中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之間的區(qū)別

    php中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之間的區(qū)別
    2009-09-09
  • PHP處理Oracle的CLOB實例

    PHP處理Oracle的CLOB實例

    這篇文章主要介紹了PHP處理Oracle的CLOB的方法,以實例形式簡單講述了寫入數(shù)據(jù)與讀取數(shù)據(jù)的方法,需要的朋友可以參考下
    2014-11-11
  • WordPress中查詢文章的循環(huán)Loop結(jié)構(gòu)及用法分析

    WordPress中查詢文章的循環(huán)Loop結(jié)構(gòu)及用法分析

    這篇文章主要介紹了WordPress中查詢文章的循環(huán)Loop結(jié)構(gòu)及用法分析,順帶介紹了提供各種查詢方法的WP_Query類的一些基本情況,需要的朋友可以參考下
    2015-12-12
  • php傳值賦值和傳地址賦值用法實例分析

    php傳值賦值和傳地址賦值用法實例分析

    這篇文章主要介紹了php傳值賦值和傳地址賦值用法,以實例形式較為詳細的分析了php的常見賦值技巧,需要的朋友可以參考下
    2015-06-06
  • 淺析Dos下運行php.exe,出現(xiàn)沒有找到php_mbstring.dll 錯誤的解決方法

    淺析Dos下運行php.exe,出現(xiàn)沒有找到php_mbstring.dll 錯誤的解決方法

    本篇文章是對在Dos下運行php.exe,出現(xiàn)沒有找到php_mbstring.dll 錯誤的解決方法進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06

最新評論