PHP匿名函數(閉包函數)

php的閉包(Closure)也就是匿名函數。是PHP5.3引入的。
閉包的語法很簡單,需要注意的關鍵字就只有use,use意思是連接閉包和外界變量。
什麼是閉包函數:
1、常規函數:
function functionname($a,$b){
return $a+$b;
} //可以沒有分號
2、變量函數:
function functionname($a,$b){
return $a+$b;
} //可以沒有分號
$var = "functionname";
echo $var(1,2);
var_dump($var); //字符串
3、匿名函數
$var = function(){
}; //一定要加分號
可以有參數,有返回值;
$var = function($a,$b){
return $a+$b;
};
var_dump($var); //對象
調用:
echo $var($a,$b);
用法:
1、替代變量函數。(參考上面2和3)
2、PHP閉包實現,主要依靠匿名函數
什麼是閉包:子函數可以使用父函數的局部變量,這種行爲叫做閉包!
下面來幾個例子,瞭解一下閉包的含義;
1.
<?php
$a = 0;
function one(){
$a = 1;
$var = function($b){
echo $a;
echo $b;
};
$var('cccccc');
}
one();
//提示,$a未定義;
2.
<?php
$a = 0;
function one(){
$a = 1;
$var = function($b){
global$a;
echo $a;
echo $b;
};
$var('cccccc');
}
one();
//0cccccc 訪問函數外面的$a,而不是父函數中的局部變量$a;
3.
<?php
$a = 0;
function one(){
$a = 1;
$var = function($b)use($a){
echo $a;
echo $b;
};
$var('cccccc');
}
one();
//1cccccc 使用use,訪問父函數中的$a;
4.閉包函數中’&‘的使用,實現子函數與父函數變量同步。
沒使用’&‘
<?php
$a = 0;
function one(){
$a = 1;
$var = function($b)use($a){
$a++;
echo $a;
echo $b;
};
$var('cccccc');
echo $a;
}
one();
//2cccccc1
使用’&‘
<?php
$a = 0;
function one(){
$a = 1;
$var = function($b)use(&$a){
$a++;
echo $a;
echo $b;
};
$var('cccccc');
echo $a;
}
one();
//2cccccc2
保護函數內的變量安全——外層函數中的變量只有內部函數可以訪問到。
在內存中維持一個變量,由於閉包,外層函數中的變量一直存在於內存中,因此每次執行都會使用到。
<?php
$a = 0;
function one(){
$a = 1;
$var = function($b)use(&$a){
$a++;
echo $a;
echo $b;
};
$var('cccccc');
echo $a;
}
one();one();one();
//2cccccc2
//3cccccc3
//4cccccc4

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章