匿名函数(在 PHP 5.3 中被引入),匿名函数在php使用目前为止并不多见,但是现在的很多框架中都能看到它的影子,如果不能对匿名函数有一定的理解,对源码学习是一种阻碍。
基本的声明:
$func = function(){
//do something......
}; //切记这里要带分号
echo $func();
也可以带上参数:
$func = function($var){
return $var;
};
echo $func('test');
$func1 = function($var){
return $var;
};
$re = $func1([1,2,3]);
print_r($re);
匿名函数到底属于什么类型?
$func2 = function(){};
var_dump($func2); //object(Closure)
//你也会经常看到这样的代码
if($func2 instanceof Closure){
//.......
}
总结:
1、匿名函数属于变量的一种,属于对象的特殊变量。
2、因为是变量的一种,所以要遵循变量规则,如果要使用,必须在前文进行定义。
3、匿名是没有明确的名字,且结束需要结束符。
要使用外部变量怎么办?像普通函数那样? use 关键字是正解。
$num = 100;
function myFunc(){
global $num; //普通函数使用global,使全局变量引入局部。
return $num;
}
echo myFunc();
$func3 = function(){
global $num; //匿名函数同样可以这样,但是不建议这样使用。
return $num;
};
echo $func3();
//不建议使用global,因为我们有更好的解决办法,使用use关键字,将外部变量引入。
$func4 = function() use($num){
return ++$num;
};
echo $func4();
$func5 = function($var1,$var2)use($num){
return ($var1 + $var2) * $num;
};
echo $func5(1,2);
常规函数中调用匿名函数
function myFunc1($param){
$func = function() use ($param){
return ++$param;
};
return $func();
}
echo myFunc1(100);
将匿名函数作为参数传入到函数中
function myFunc2($callback_func){
$callback_func();
}
$func = function(){
echo "hello";
};
myFucn2($func);
直接将匿名函数作为参数进行操作
function myFunc3($callback_func){
$callback_func();
}
myFunc3(function(){
echo "hello";
});