/*
* 匿名函數(shù)
* 閉包函數(shù)(closures)
* 依靠匿名函數(shù)實(shí)現(xiàn)閉包
* 子函數(shù)可以使用父函數(shù)中的局部變量,這種行為就叫做閉包
* 連接閉包和外界變量的關(guān)鍵字 use
* 閉包的兩個(gè)特點(diǎn)
* 1.作為一個(gè)函數(shù)變量的一個(gè)引用,當(dāng)函數(shù)返回時(shí),其處于激活狀態(tài)。
* 2.一個(gè)閉包就是當(dāng)一個(gè)函數(shù)返回時(shí),一個(gè)沒(méi)有釋放資源的棧區(qū)。
* 閉包函數(shù)返回時(shí),該函數(shù)內(nèi)部變量處于激活狀態(tài),函數(shù)在棧區(qū)依然保留。
*
* 總結(jié)
* 1.閉包外層是個(gè)函數(shù)
* 2.閉包內(nèi)部都有函數(shù)
* 3.閉包會(huì)return內(nèi)部函數(shù)
* 4.閉包返回的函數(shù)內(nèi)部不能有return(不然就真的結(jié)束了)
* 5.執(zhí)行閉包后,閉包內(nèi)部變量會(huì)存在,而閉包內(nèi)部函數(shù)的內(nèi)部變量不會(huì)存在。
*
* 閉包的應(yīng)用場(chǎng)景
* 1.保護(hù)函數(shù)內(nèi)的變量安全,外層函數(shù)中變量只有內(nèi)部函數(shù)才能訪(fǎng)問(wèn),而無(wú)法通過(guò)其他途徑訪(fǎng)問(wèn)到,因此保護(hù)了外層函數(shù)中變量的安全性。
* 2.在內(nèi)存中維持一個(gè)變量。閉包,返回內(nèi)部函數(shù),用到了外層函數(shù)中的變量,所以外層函數(shù)中的變量一直存在于內(nèi)存中。因此每次執(zhí)行,都會(huì)使用到。
*
*/
$var = function ($a,$b){
echo '我是匿名函數(shù)
';
return $a+$b;
};//匿名函數(shù)一定要加分號(hào)
echo $var(1,2);
var_dump($var);//object(Closure)[1] 對(duì)象 內(nèi)置類(lèi)Closure的一個(gè)實(shí)例 即對(duì)象
function one(){
echo '1
';
function two(){
echo '2
';
}
function three(){
echo '3
';
}
two();
}
one();
function demo(){
$a = 10;
$b = 20;
$one = function ($param) use (&$a,$b) {//用use使用外部變量$a,$b 利用&引用 改變$a的值
echo $param."
" ;
$a++;
echo $a."
";
echo $b."
";
};
// $one('hello world');
// echo $a;
return $one;
}
$var = demo();
$var ('yangsir');//$a變量沒(méi)有被釋放 11
$var ('wangsir');//$a變量沒(méi)有被釋放 12
function test($fun){
echo $fun();
}
test(function(){
return '我是匿名函數(shù)進(jìn)行傳參數(shù)';
});
文章標(biāo)題:PHP閉包函數(shù)Closures匿名函數(shù)
URL標(biāo)題:
http://weahome.cn/article/ihdgcs.html