成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

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

Shimmer / 2434人閱讀

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

什么是生成器Generators

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

一個(gè)簡(jiǎn)單的例子就是使用生成器來重新實(shí)現(xiàn) range() 函數(shù)。 標(biāo)準(zhǔn)的 range() 函數(shù)需要在內(nèi)存中生成一個(gè)數(shù)組包含每一個(gè)在它范圍內(nèi)的值,然后返回該數(shù)組, 結(jié)果就是會(huì)產(chǎn)生多個(gè)很大的數(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

測(cè)試結(jié)果論述

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

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

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

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

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

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

使用場(chǎng)景,可查閱參考資料2

參考資料:

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

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

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

相關(guān)文章

  • PHP 成器入門

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

    IamDLY 評(píng)論0 收藏0
  • yeoman-generator 入門教程

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

    caiyongji 評(píng)論0 收藏0
  • 人人必備10個(gè) Laravel 4 擴(kuò)展包

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

    darkbug 評(píng)論0 收藏0
  • Node.js 入門你需要知道 10 個(gè)問題

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

    szysky 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<