匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值。当然,也有其它应用的情况。
匿名函数是在php5.3之后才引入的概念,到现在php7.0为止 通过 Closure 类来实现。一、匿名函数
下面我们看下匿名函数定义方式(和JS相似)
$anonymousFunction = function(){
...
};
例如:我们通过匿名函数来输出 ‘This is anonymous function’
$anonymousFunction = function($a){
echo $a;
};
$anonymousFunction('This is anonymous function');
在工作中往往我们也会用到,如 preg_replace_callback
preg_replace_callback('/[a-z\W]+/', function ($match) {
print_r($match);
}, 'hello world 123');
二、闭包
如果我们将匿名函数放到普通方法中,这样就形成了一个简单的闭包
function func () {
$anonymousFunction = function(){
echo 'This is anonymous function';
};
$anonymousFunction();
}
func();
倘若我们需要在匿名函数中调用普通方法的局部变量 如
function func () {
$data = 'This is anonymous function';
$anonymousFunction = function(){
echo $data;
};
$anonymousFunction();
}
func();
结果是返回一个notice错误
Notice: Undefined variable: data in /private/var/www/test/index.php on line 28
那我们需要在匿名函数中调用局部变量,应该怎么做呢?
二.1 作为参数传递
function func () {
$data = 'This is anonymous function';
$anonymousFunction = function($data){
echo $data;
};
$anonymousFunction($data);
}
func();
二.2 使用关键字 use
<注:use关键字除了在命名空间中 引入文件并为文件起别名以外的第二个用途>
function func () {
$data = 'This is anonymous function';
$anonymousFunction = function() use ($data){
echo $data;
};
$anonymousFunction();
}
func();
倘若我们需要用闭包改变引入变量值,那我们就需要用到&(取地址符了) 如
function func () {
$data = 'This is anonymous function';
$anonymousFunction = function(&$data) {
$data = 'Change';
};
$anonymousFunction($data);
echo $data;
}
func();
或者
function func () {
$data = 'This is anonymous function';
$anonymousFunction = function() use (&$data){
$data = 'Change';
};
$anonymousFunction();
echo $data;
}
func();
另外,我们还可以将匿名函数作为参数进行传递
$anonymousFunction = function($mess){
return $mess;
};
function ff ($para, $mess) {
echo $para($mess);
}
ff($anonymousFunction, 'This is anonymous function');
以上为个人理解,倘若有不对的地方感谢告知。