av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁技術(shù)文章
文章詳情頁

php生成器詳細(xì)講解

瀏覽:137日期:2022-06-06 08:41:29
目錄
  • 一、生成器的概念
  • 二、生成器的優(yōu)點(diǎn)
  • 三、生成器語法
  • 四、生成器的簡單實(shí)例
  • 五、生成器簡單實(shí)際應(yīng)用

一、生成器的概念

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

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

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

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

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

三、生成器語法

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

四、生成器的簡單實(shí)例

我們都知道php中有一個(gè)range函數(shù),他的作用是創(chuàng)建一個(gè)包含指定范圍的元素的數(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)時(shí)將導(dǎo)致占用內(nèi)存耗盡

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

1)編寫一個(gè)生成器函數(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ù)打印出來

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

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

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

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

public function readTest($txt)
{
    //打開文件
    $handle = fopen($txt, "rb");
    //檢測是否已到達(dá)文件末尾
    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 />";
}

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

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

標(biāo)簽: PHP
主站蜘蛛池模板: 国产一区视频在线 | 色综合天天综合网天天狠天天 | 日韩视频一区二区三区 | 91青青草 | 国产精品羞羞答答 | 91视频在线观看免费 | 国产三级在线免费观看 | 国产一级免费视频 | 国产做爰免费观看视频 | 日韩毛片在线播放 | 天天操一操 | 天天躁日日躁狠狠很躁 | 午夜精品久久久久 | 亚洲乱色 | 成年人视频在线播放 | 超碰99在线 | av网站导航 | 色哥网 | 天天爽夜夜操 | 国产精品久久久久久久久久久久午夜片 | 亚洲综合在线视频 | 秋霞一区二区三区 | 日韩成人一区二区 | 日韩精品视频免费播放 | 中文字幕免费在线观看 | 日韩免费在线 | 久久一二三区 | 亚洲国产日韩在线 | 黄色一级免费视频 | 国产精品一品二区三区的使用体验 | 亚洲第一av | 成人观看视频 | 亚洲天堂一区 | 中文一级片 | 欧美亚洲激情 | 国产欧美一区二区精品性色超碰 | 看黄色大片 | 中文字幕理伦片免费看 | 久久国产综合 | 欧美区日韩区 | 国产美女自拍视频 |