国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

更多QQ空间微信QQ好友腾讯朋友复制链接
您的位置:首頁/技術文章
文章詳情頁

php生成器詳細講解

【字号: 作者:豬豬瀏覽:98日期:2022-06-06 08:41:29
目錄
  • 一、生成器的概念
  • 二、生成器的優點
  • 三、生成器語法
  • 四、生成器的簡單實例
  • 五、生成器簡單實際應用

一、生成器的概念

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

二、生成器的優點

1、生成器會對PHP應用的性能有非常大的影響

2、PHP代碼運行時節省大量的內存

3、比較適合計算大量的數據

三、生成器語法

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

四、生成器的簡單實例

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

例如:

range(0,10)

輸出結果為:

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之間所有的數組的話,調用range(0,10000000)時將導致占用內存耗盡

這時候我們就可以使用php的生成器來實現

1)編寫一個生成器函數

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)調用生成器函數

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

調用生成函數之后我們就可以將0-10000000之間的所有數打印出來

五、生成器簡單實際應用

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

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

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

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

2)調用讀取txt文件的生成器函數

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

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

到此這篇關于php生成器詳細講解的文章就介紹到這了,更多相關php生成器內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

標簽: PHP
主站蜘蛛池模板: 国产情侣无套精品视频 | 91最新地址永久入口 | 国产男女猛烈无遮档免费视频网站 | 免费伦费一区二区三区四区 | 亚洲国产精品成人午夜在线观看 | 欧美日韩大片 | 日日a.v拍夜夜添久久免费 | 国产成人一区二区三区在线播放 | 全部毛片 | 欧美成亚洲 | 三级手机在线观看 | 亚洲激情自拍 | 理伦毛片 | 免看一级a毛片一片成人不卡 | 亚洲精品无码不卡 | 国产成人精品日本亚洲网站 | 中文字幕一区二区在线视频 | 普通话对白国产情侣自啪 | 热久久伊人 | 久久国内精品 | 一级毛片在线 | 久久综合九九亚洲一区 | 亚洲综合色一区二区三区小说 | 精品一区视频 | 精品91一区二区三区 | 亚洲午夜久久久久国产 | 国产美女精品视频 | 九九免费精品视频 | 精品视频在线一区 | a毛片全部播放免费视频完整18 | 亚洲天天在线 | 精品久久久久久国产91 | 欧美日韩色黄大片在线视频 | 全部免费的毛片视频观看 | 久久精品国产免费观看99 | 成人免费网站久久久 | 黄色a站 | 欧美三级 欧美一级 | 三级黄色高清视频 | 中文字幕天堂最新版在线网 | 亚洲自偷自拍另类12p |