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

資訊專欄INFORMATION COLUMN

PHP閉包的理解與介紹

gotham / 2867人閱讀

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

看過許多關于PHP中閉包的講解,每個文檔想要表達的意思大體相同,但是理解起來很費勁,我根據自身理解加以描述,有更好的理解請指出

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

本文分為3步
1:講解閉包的使用
2:閉包實例
3:閉包總結

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

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

$data();

$param = 2;
$data();

// 輸出結果為
1
1

分析結果:use的用法相當于對象(類的用法),$data(),表示實例化一次,然而語言有著文本流的特性,第二次$data()沒有重新實例,實例的時候取到的值是1,所以輸出結果為上面結果;

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

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

$data();

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

// 輸出結果為
1
2

分析結果:文本流的形式,又實例化一次變量所以存儲變量為2,最終輸出為2;

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

 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

分析結果:function后面的括號相當于函數的用法,每次調用函數時傳入數據一樣,每次都需要傳入,后面的use表示實例一次后不變,所以obj隨時改變。

2、閉包實例

例子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、閉包總結

閉包總結到最后,就是與函數不同的地方就是多加了一個use中間值,使用的時候注意一點是function后面的()為可變變量,use()里面的變量為實例一次后不改動的變量,循環里面寫閉包這種方法不是很好用,相當于每次都實例,所以閉包的寫法可以先定義一個方法在調用。

閉包與函數真正的區別:

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/31208.html

相關文章

  • 談談我所理解閉包,js、php、golang里closure

    摘要:當初看這個解釋有點懵逼,理解成閉包就是函數中的函數了。里的閉包最近不滿足于只干前端的活,開始用起了。里的閉包最近在學習語言,讓我們來看一下語言里的閉包。在中,閉包特指將函數作為值返回的情況,被返回的函數引用了生成它的母函數中的變量。 本人開始接觸編程是從js開始的,當時網上很多人說閉包是難點,各種地方對閉包的解釋也是千奇百怪。如今開始接觸js以外的各種編程語言,發現不光是js,php、...

    betacat 評論0 收藏0
  • 談談我所理解閉包,js、php、golang里closure

    摘要:當初看這個解釋有點懵逼,理解成閉包就是函數中的函數了。里的閉包最近不滿足于只干前端的活,開始用起了。里的閉包最近在學習語言,讓我們來看一下語言里的閉包。在中,閉包特指將函數作為值返回的情況,被返回的函數引用了生成它的母函數中的變量。 本人開始接觸編程是從js開始的,當時網上很多人說閉包是難點,各種地方對閉包的解釋也是千奇百怪。如今開始接觸js以外的各種編程語言,發現不光是js,php、...

    zhoutao 評論0 收藏0
  • Laravel修煉:服務容器綁定解析

    摘要:用匿名函數的好處在于,這個服務綁定到容器以后,并不會立即產生服務最終的對象,只有在這個服務解析的時候,匿名函數才會執行,此時才會產生這個服務對應的服務實例。 前言 ? 老實說,第一次老大讓我看laravel框架手冊的那天早上,我是很絕望的,因為真的沒接觸過,對我這種渣渣來說,laravel的入門門檻確實有點高了,但還是得硬著頭皮看下去(雖然到現在我還有很多沒看懂,也沒用過)。? 后面慢...

    The question 評論0 收藏0
  • PHP 7.4 新語法:箭頭函數

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

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

    摘要:前言騰訊一面,相比阿里一面來說,騰訊一面先給打電話預定時間,這也給了我們這些面試者去準備的時間。其實閉包也就是指有權訪問另一個函數作用域的函數而已。常用的創建閉包的方法就是在函數內部創建另一個函數。 前言 騰訊一面,相比阿里一面來說,騰訊一面先給打電話預定時間,這也給了我們這些面試者去準備的時間。但是也正是因為這種確定性,也有在等待電話的時候的心情的忐忑。 背景 我是一名大三學生,大一...

    Kosmos 評論0 收藏0

發表評論

0條評論

gotham

|高級講師

TA的文章

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