/*
* 匿名函數
* 閉包函數(closures)
* 依靠匿名函數實現閉包
* 子函數可以使用父函數中的局部變量,這種行為就叫做閉包
* 連接閉包和外界變量的關鍵字 use
* 閉包的兩個特點
* 1.作為一個函數變量的一個引用,當函數返回時,其處于激活狀態。
* 2.一個閉包就是當一個函數返回時,一個沒有釋放資源的棧區。
* 閉包函數返回時,該函數內部變量處于激活狀態,函數在棧區依然保留。
*
* 總結
* 1.閉包外層是個函數
* 2.閉包內部都有函數
* 3.閉包會return內部函數
* 4.閉包返回的函數內部不能有return(不然就真的結束了)
* 5.執行閉包后,閉包內部變量會存在,而閉包內部函數的內部變量不會存在。
*
* 閉包的應用場景
* 1.保護函數內的變量安全,外層函數中變量只有內部函數才能訪問,而無法通過其他途徑訪問到,因此保護了外層函數中變量的安全性。
* 2.在內存中維持一個變量。閉包,返回內部函數,用到了外層函數中的變量,所以外層函數中的變量一直存在于內存中。因此每次執行,都會使用到。
*
*/
$var = function ($a,$b){
echo '我是匿名函數<br/>';
return $a+$b;
};//匿名函數一定要加分號
echo $var(1,2);
var_dump($var);//object(Closure)[1] 對象 內置類Closure的一個實例 即對象
function one(){
echo '1<br/>';
function two(){
echo '2<br/>';
}
function three(){
echo '3<br/>';
}
two();
}
one();
function demo(){
$a = 10;
$b = 20;
$one = function ($param) use (&$a,$b) {//用use使用外部變量$a,$b 利用&引用 改變$a的值
echo $param."<br/>" ;
$a++;
echo $a."<br/>";
echo $b."<br/>";
};
// $one('hello world');
// echo $a;
return $one;
}
$var = demo();
$var ('yangsir');//$a變量沒有被釋放 11
$var ('wangsir');//$a變量沒有被釋放 12
function test($fun){
echo $fun();
}
test(function(){
return '我是匿名函數進行傳參數';
});免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。