国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

PHP 生成器Generators的入門理解和學(xué)習(xí)

Shimmer / 2382人閱讀

摘要:例子代碼上午內(nèi)存消耗量環(huán)境執(zhí)行命令結(jié)果返回內(nèi)存消耗量結(jié)果返回內(nèi)存消耗量測試結(jié)果論述通過代碼的執(zhí)行,比較除了標(biāo)準(zhǔn)函數(shù)和自定義函數(shù)之間的異同。標(biāo)準(zhǔn)函數(shù),該函數(shù)將轉(zhuǎn)換為一個。使用場景,可查閱參考資料參考資料實際生產(chǎn)中的使用

什么是生成器Generators

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

一個簡單的例子就是使用生成器來重新實現(xiàn) range() 函數(shù)。 標(biāo)準(zhǔn)的 range() 函數(shù)需要在內(nèi)存中生成一個數(shù)組包含每一個在它范圍內(nèi)的值,然后返回該數(shù)組, 結(jié)果就是會產(chǎn)生多個很大的數(shù)組。 比如,調(diào)用 range(0, 10000) 將導(dǎo)致內(nèi)存占用超過 4 MB。

例子代碼

= 0) {
            throw new LogicException("Step must be -ve");
        }

        for ($i = $start; $i >= $limit; $i += $step) {
            yield $i;
        }
    }
}
if ($argc === 1) {
    $iterate = rangeWithGenerators(0, $num, 1);
    foreach ($iterate as $value){
        echo $value . "
";
    }
    //var_dump(iterator_to_array($iterate));
}
if ($argc === 2) {
    $test = range(0, $num, 1);
    foreach ($test as $value) {
        echo $value . "
";
    }
}
$end = xdebug_memory_usage();

echo sprintf("內(nèi)存消耗量%s
", convert($end-$start));

function convert($size){
    $unit=array("b","kb","mb","gb","tb","pb");
    return @round($size/pow(1024,($i=floor(log($size,1024)))),2)." ".$unit[$i];
}

環(huán)境

PHP7.1

Xdebug

執(zhí)行命令

php test.php 結(jié)果返回:內(nèi)存消耗量416 b

php test.php range 結(jié)果返回:內(nèi)存消耗量4 mb

測試結(jié)果論述

通過代碼的執(zhí)行,比較除了PHP標(biāo)準(zhǔn)函數(shù)rang()和自定義函數(shù)rangeWithGenerators()之間的異同。實現(xiàn)了同樣的目的,卻消耗著不同的內(nèi)存,生成器的優(yōu)點顯而易見。

rangeWithGenerators()使用了生成器,而生成器的關(guān)鍵就是使用yield關(guān)鍵詞,yield常見的使用涉及到foreach和for兩個流程控制語句。rangeWithGenerators()中for循環(huán)yield變量$i(yield可理解為生成-值,如同return可理解為返回-值)。

rangeWithGenerators()函數(shù)返回的便是一個生成器Generators( 使用var_dump($iterate)查看其類型 )。

既然rangeWithGenerators()函數(shù)返回的是一個生成器,我們可以使用以下兩種方式來使用:

foreach循環(huán)該Generators,本例子中則使用該方法讀取Generators。

PHP標(biāo)準(zhǔn)函數(shù)iterator_to_array(),該函數(shù)將Generators轉(zhuǎn)換為一個Array。

使用場景,可查閱參考資料2

參考資料:

http://php.net/manual/zh/lang...
實際生產(chǎn)中的使用

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/29153.html

相關(guān)文章

  • PHP 成器入門

    摘要:執(zhí)行語句的唯一目的是結(jié)束生成器執(zhí)行。這就是需要生成器需要有返回值的意義,這也是為何我們將這個特性加入到中的原因,我們會將最后執(zhí)行的值作為返回值,但這不是一個好的解決方案。 本文首發(fā)于 入門 PHP 生成器,轉(zhuǎn)載請注明出處。 PHP 在 5.5 版本中引入了「生成器(Generator)」特性,不過這個特性并沒有引起人們的注意。在官方的 從 PHP 5.4.x 遷移到 PHP 5.5.x...

    IamDLY 評論0 收藏0
  • yeoman-generator 入門教程

    摘要:上下文路徑為了方便文件流的輸入輸出,使用兩種位置環(huán)境。目標(biāo)上下文目標(biāo)上下文定義為當(dāng)前工作目錄或含文件最接近的父文件夾。這確保了用戶行為的一致。幫助用戶嚴重需要覆蓋的內(nèi)容。 摘要 隨著 Web 2.0 和 HTML 5 的流行,現(xiàn)在的 Web 應(yīng)用所能提供的功能和交互能力比之前傳統(tǒng)的 Web 應(yīng)用要強大很多。應(yīng)用的很多實現(xiàn)邏輯被轉(zhuǎn)移到了瀏覽器端來實現(xiàn)。瀏覽器不再只提供單一的數(shù)據(jù)接收和展現(xiàn)...

    caiyongji 評論0 收藏0
  • 人人必備10個 Laravel 4 擴展包

    摘要:更多擴展包中有豐富的擴展包來幫你完成幾乎任何你想實現(xiàn)的功能。我們不能把所有的擴展包都整理出來,然而,這里還是列出了一些很有用的。總之,你幾乎總是能夠找到一個擴展包可以解決你當(dāng)前的問題。 Laravel 是一個非常流行且簡單易用的PHP框架,它提供了很多基礎(chǔ)的工具(如 RESTful 路由、內(nèi)置的ORM、模版等)使你能夠快速的創(chuàng)建應(yīng)用。這意味著你可以花費更少的時間來建立應(yīng)用程序的模版,給...

    darkbug 評論0 收藏0
  • Node.js 入門你需要知道 10 個問題

    摘要:什么是在中什么時候需要是中的包管理器。允許我們?yōu)榘惭b各種模塊,這個包管理器為我們提供了安裝刪除等其它命令來管理模塊。 showImg(https://user-gold-cdn.xitu.io/2019/7/11/16bde5b2df52a924?w=4000&h=2667&f=jpeg&s=450648); 本文為您分享「Node.js 入門你需要知道的 10 個問題」這些問題可能也...

    szysky 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<