眾所周知,大家都知道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 函...