成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

PHP閉包的理解與介紹

gotham / 2870人閱讀

摘要:閉包與函數(shù)真正的區(qū)別函數(shù)封裝一次多處調(diào)用。閉包只限于本方法使用,耦合度低到忽略。

看過(guò)許多關(guān)于PHP中閉包的講解,每個(gè)文檔想要表達(dá)的意思大體相同,但是理解起來(lái)很費(fèi)勁,我根據(jù)自身理解加以描述,有更好的理解請(qǐng)指出

眾所周知,大家都知道PHP的閉包是function () use (){};

本文分為3步
1:講解閉包的使用
2:閉包實(shí)例
3:閉包總結(jié)

1、講解閉包的使用
1:閉包中的use使用-上篇

 function () use($param){}; 
$param = 1;
$data = function () use ($param)
{
    var_dump($param);    
};

$data();

$param = 2;
$data();

// 輸出結(jié)果為
1
1

分析結(jié)果:use的用法相當(dāng)于對(duì)象(類(lèi)的用法),$data(),表示實(shí)例化一次,然而語(yǔ)言有著文本流的特性,第二次$data()沒(méi)有重新實(shí)例,實(shí)例的時(shí)候取到的值是1,所以輸出結(jié)果為上面結(jié)果;

2:閉包中的use使用-下篇

$param = 1;
$data = function () use ($param)
{
    var_dump($param);    
};

$data();

$param = 2;
$data = function () use ($param)
{
    var_dump($param);    
};
$data();

// 輸出結(jié)果為
1
2

分析結(jié)果:文本流的形式,又實(shí)例化一次變量所以存儲(chǔ)變量為2,最終輸出為2;

3:閉包中function()后面的括號(hào),use前面的括號(hào)用法

 function ($obj) use($param){}; 
    $param = 1;
    $data = function ($obj) use ($param)
    {
        var_dump($obj);
        var_dump($param);    
    };
    $data(2);
    
    $data(3);
    
    $param = 2;
    $data(4);
    // 輸出
    2
    1
    
    3
    1
    
    4
    1

分析結(jié)果:function后面的括號(hào)相當(dāng)于函數(shù)的用法,每次調(diào)用函數(shù)時(shí)傳入數(shù)據(jù)一樣,每次都需要傳入,后面的use表示實(shí)例一次后不變,所以obj隨時(shí)改變。

2、閉包實(shí)例

例子1:

    $arr = [
        "米" => ["咸粥", "甜粥", "米飯"], 
        "面" => ["面條", "花卷", "饅頭"], 
    ];

    $param = "";
    $bag = function ($data) use ($param)
    {
        $l = count($data);
        return $data[rand(0, $l-1)];
    };

    $eat_arr = [];
    
    foreach ($arr as $key => $value) {
        $each_arr[] = "吃".$key.":".$bag($value);        
    }

    echo implode(",", $each_arr);
    
    // 輸出
    吃米:米飯,  吃面:面條
    吃米:甜粥,  吃面:饅頭

例子2:

    $arr = [
        "米" => ["咸粥", "甜粥", "米飯"], 
        "面" => ["面條", "花卷", "饅頭"], 
    ];

    $eat_arr = [];
    
    foreach ($arr as $key => $value) 
    {
        $bag = function () use ($value)
        {
            $l = count($value);
            return $value[rand(0, $l-1)];
        };

        $each_arr[] = "吃".$key.":".$bag();        
    }

    echo implode(",", $each_arr);
    // 輸出
    吃米:甜粥, 吃面:面條
    吃米:甜粥, 吃面:花卷
    

3、閉包總結(jié)

閉包總結(jié)到最后,就是與函數(shù)不同的地方就是多加了一個(gè)use中間值,使用的時(shí)候注意一點(diǎn)是function后面的()為可變變量,use()里面的變量為實(shí)例一次后不改動(dòng)的變量,循環(huán)里面寫(xiě)閉包這種方法不是很好用,相當(dāng)于每次都實(shí)例,所以閉包的寫(xiě)法可以先定義一個(gè)方法在調(diào)用。

閉包與函數(shù)真正的區(qū)別:

函數(shù):封裝一次多處調(diào)用。
閉包:只限于本方法使用,耦合度低到忽略。

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/31208.html

相關(guān)文章

  • 談?wù)勎宜?em>理解閉包,js、php、golang里closure

    摘要:當(dāng)初看這個(gè)解釋有點(diǎn)懵逼,理解成閉包就是函數(shù)中的函數(shù)了。里的閉包最近不滿(mǎn)足于只干前端的活,開(kāi)始用起了。里的閉包最近在學(xué)習(xí)語(yǔ)言,讓我們來(lái)看一下語(yǔ)言里的閉包。在中,閉包特指將函數(shù)作為值返回的情況,被返回的函數(shù)引用了生成它的母函數(shù)中的變量。 本人開(kāi)始接觸編程是從js開(kāi)始的,當(dāng)時(shí)網(wǎng)上很多人說(shuō)閉包是難點(diǎn),各種地方對(duì)閉包的解釋也是千奇百怪。如今開(kāi)始接觸js以外的各種編程語(yǔ)言,發(fā)現(xiàn)不光是js,php、...

    betacat 評(píng)論0 收藏0
  • 談?wù)勎宜?em>理解閉包,js、php、golang里closure

    摘要:當(dāng)初看這個(gè)解釋有點(diǎn)懵逼,理解成閉包就是函數(shù)中的函數(shù)了。里的閉包最近不滿(mǎn)足于只干前端的活,開(kāi)始用起了。里的閉包最近在學(xué)習(xí)語(yǔ)言,讓我們來(lái)看一下語(yǔ)言里的閉包。在中,閉包特指將函數(shù)作為值返回的情況,被返回的函數(shù)引用了生成它的母函數(shù)中的變量。 本人開(kāi)始接觸編程是從js開(kāi)始的,當(dāng)時(shí)網(wǎng)上很多人說(shuō)閉包是難點(diǎn),各種地方對(duì)閉包的解釋也是千奇百怪。如今開(kāi)始接觸js以外的各種編程語(yǔ)言,發(fā)現(xiàn)不光是js,php、...

    zhoutao 評(píng)論0 收藏0
  • Laravel修煉:服務(wù)容器綁定解析

    摘要:用匿名函數(shù)的好處在于,這個(gè)服務(wù)綁定到容器以后,并不會(huì)立即產(chǎn)生服務(wù)最終的對(duì)象,只有在這個(gè)服務(wù)解析的時(shí)候,匿名函數(shù)才會(huì)執(zhí)行,此時(shí)才會(huì)產(chǎn)生這個(gè)服務(wù)對(duì)應(yīng)的服務(wù)實(shí)例。 前言 ? 老實(shí)說(shuō),第一次老大讓我看laravel框架手冊(cè)的那天早上,我是很絕望的,因?yàn)檎娴臎](méi)接觸過(guò),對(duì)我這種渣渣來(lái)說(shuō),laravel的入門(mén)門(mén)檻確實(shí)有點(diǎn)高了,但還是得硬著頭皮看下去(雖然到現(xiàn)在我還有很多沒(méi)看懂,也沒(méi)用過(guò))。? 后面慢...

    The question 評(píng)論0 收藏0
  • PHP 7.4 新語(yǔ)法:箭頭函數(shù)

    摘要:原因如下短閉包的目的是為了減少冗余。然而,的創(chuàng)建者認(rèn)為,如果你要處理的是多行表達(dá)式的函數(shù),那么使用閉包獲得的益處就更少了。這意味著你可以改變短閉包內(nèi)的變量,但它不會(huì)對(duì)外部作用域中的變量產(chǎn)生影響。 showImg(https://segmentfault.com/img/remote/1460000019117465?w=722&h=350);短閉包,也叫做箭頭函數(shù),是一種用 php 編...

    darcrand 評(píng)論0 收藏0
  • 2018年騰訊前端一面總結(jié)(面向2019屆學(xué)生)

    摘要:前言騰訊一面,相比阿里一面來(lái)說(shuō),騰訊一面先給打電話(huà)預(yù)定時(shí)間,這也給了我們這些面試者去準(zhǔn)備的時(shí)間。其實(shí)閉包也就是指有權(quán)訪問(wèn)另一個(gè)函數(shù)作用域的函數(shù)而已。常用的創(chuàng)建閉包的方法就是在函數(shù)內(nèi)部創(chuàng)建另一個(gè)函數(shù)。 前言 騰訊一面,相比阿里一面來(lái)說(shuō),騰訊一面先給打電話(huà)預(yù)定時(shí)間,這也給了我們這些面試者去準(zhǔn)備的時(shí)間。但是也正是因?yàn)檫@種確定性,也有在等待電話(huà)的時(shí)候的心情的忐忑。 背景 我是一名大三學(xué)生,大一...

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

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

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<