匿名函數(shù)
在PHP5.3.0以上版本有效
也稱閉包函數(shù),可以有參數(shù)梅割,有返回值乃坤,結(jié)尾處必須加分號
$func = function(){
};
$func();
匿名函數(shù)的一個用法陶贼,類似于閉包悦荒。
function demos($fun){
echo $fun();
}
demos(function(){
return "@22222".'<br>';
});
閉包
閉包的實現(xiàn)主要是靠匿名函數(shù)
將匿名函數(shù)在普通函數(shù)中當做參數(shù)傳入春贸,也可以被返回混萝。這就是一個簡單地閉包。
特點:
1.閉包外層是個函數(shù)
2.閉包內(nèi)部都有函數(shù)
3.閉包會return內(nèi)部函數(shù)
4.閉包返回的函數(shù)內(nèi)部不能有return
5.執(zhí)行閉包后萍恕,閉包內(nèi)部變量會存在逸嘀,閉包內(nèi)部函數(shù)的內(nèi)部變量不會存在
6.閉包函數(shù)返回時,函數(shù)內(nèi)部變量處于激活狀態(tài)允粤,函數(shù)所在棧區(qū)依然保留
function demo(){
$a = 10;
$b = 20;
//關(guān)鍵詞use 使匿名函數(shù)能調(diào)用函數(shù)內(nèi)部的參數(shù)崭倘,&的引用,使變量的值發(fā)生改變
$one = function($str) use(&$a,&$b){
echo $str."<br>";
echo $b."<br>";
$a++;
echo $a."<br>";
//內(nèi)存函數(shù)不能加返回值类垫,不然直接終止
};
return $one;
}
$var = demo();
$var = ("what");
$var = ("123");//通過兩次調(diào)用司光,發(fā)現(xiàn)每次a的值均有變化
閉包的應(yīng)用場景
1.保護函數(shù)內(nèi)的變量安全。外層函數(shù)中變量只有內(nèi)部函數(shù)才能訪問悉患,而無法通過其他途徑訪問到残家,因此保護了外層變量的安全性。
2.在內(nèi)存中維持一個變量售躁,外層函數(shù)中的變量一直存在于內(nèi)存中坞淮,因此每次執(zhí)行都會用到茴晋。