PHP閉包的理解與介紹

2021-10-03 04:20:40 字數 2052 閱讀 5590

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

1、講解閉包的使用

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

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

$data = function () use ($param)

;$data();

$param = 2;

$data();

// 輸出結果為

11

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

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

$param = 1;

$data = function () use ($param)

;$data();

$param = 2;

$data = function () use ($param)

;$data();

// 輸出結果為

12

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

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

function ($obj) use($param){};
$param = 1;

$data = function ($obj) use ($param)

;$data(2);

$data(3);

$param = 2;

$data(4);

// 輸出21

31

41

分析結果:function後面的括號相當於函式的用法,每次呼叫函式時傳入資料一樣,每次都需要傳入,後面的use表示例項一次後不變,所以obj隨時改變。

2、閉包例項

例子1:

$arr = [

'公尺' => ['鹹粥', '甜粥', '公尺飯'],

'面' => ['麵條', '花卷', '饅頭'],

];$param = '';

$bag = function ($data) use ($param)

;$eat_arr = ;

foreach ($arr as $key => $value)

echo implode(',', $each_arr);

// 輸出

吃公尺:公尺飯, 吃麵:麵條

吃公尺:甜粥, 吃麵:饅頭

例子2:

$arr = [

'公尺' => ['鹹粥', '甜粥', '公尺飯'],

'面' => ['麵條', '花卷', '饅頭'],

];$eat_arr = ;

foreach ($arr as $key => $value)

;$each_arr = '吃'.$key.':'.$bag();

}echo implode(',', $each_arr);

// 輸出

吃公尺:甜粥, 吃麵:麵條

吃公尺:甜粥, 吃麵:花卷

3、閉包總結

閉包總結到最後,就是與函式不同的地方就是多加了乙個use中間值,使用的時候注意一點是function後面的()為可變變數,use()裡面的變數為例項一次後不改動的變數,迴圈裡面寫閉包這種方法不是很好用,相當於每次都例項,所以閉包的寫法可以先定義乙個方法在呼叫。

閉包與函式真正的區別:

函式:封裝一次多處呼叫。

閉包:只限於本方法使用,耦合度低到忽略。

閉包的應用與理解

普通函式能完成大功能編寫,匿名函式能完成小功能 編寫,而且當作實參非常方便 而閉包比函式方便,擁有函式 的功能 類似於匿名函式 還能有 所需要使用資料 而面向對像,例項物件賦值給引數,裡面的引數和方法都有,但應用中往往只要一部分,而不是全部,故閉包的優點就能體現出來,就是比物件導向更輕量,不會有多餘...

閉包的理解

閉包 是指有權訪問另乙個函式作用域中的變數的函式。建立閉包的常見方式就是在乙個函式內部建立另乙個函式 在函式createcomparisonfunction 中返回了乙個匿名函式,建立了乙個閉包。當匿名函式被返回時,其作用域鏈包含外部函式createcomparisonfunction的作用域鏈,這...

閉包的理解

function a return b b不能直接越過a在全域性作用 var c a c i 1var inner 定義 function outer outer 呼叫 inner 呼叫function outer x return inner var i outer 3 i 3 輸出6特點 1 函...