PHP匿名函数
匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值。当然,也有其它应用的情况。
举个例子:
<?php
echo preg_replace_callback('~-([a-z])~', function ($match) {
return strtoupper($match[1]);
}, 'hello-world');
// 输出 helloWorld
?>
使用方式:
1) 将匿名函数放在普通函数中,也可以将匿名函数返回,:这样就构成了一个简单的闭包
<?php
function closure(){
$anonymous = function(){
echo "test1";
};
$anonymous();//普通函数内部调用了匿名函数
}
closure();//输出: test1
2) 在匿名函数中引用局部变量(这里要引用一个php的关键字 use)
<?php
function closure(){
$username = ' test';
$anonymous = function() use($username){
echo $username;
};
$anonymous();//此处调用了匿名函数
}
closure();//输出: test
3 在普通函数中返回匿名函数
<?php
function closure(){
$username = ' test';
$anonymous = function() use($username){
echo $username;
};
return $anonymous;// 函数返回匿名函数
}
$func = closure();
$func(); //然后调用$func()
4 返回匿名函数并给匿名函数传参
<?php
function closure(){
$username = ' test';
$anonymous = function($lover,$skill) use($username){
echo $username.$lover.$skill;
};
return $anonymous;
}
$func = closure();
$func("-one-","two");// test-one-two
5 使用闭包改变上下文引用的变量值,如果要累积++效果, 只要加一个 & 引用符号就可以了(匿名函数内的修改也会影响外部变量)
<?php
function closure(){
$number = 100;
$anonymous = function() use($number) {
$number++;
echo $number.PHP_EOL;
};
echo $number.PHP_EOL;
return $anonymous;
}
$func = closure();// 这里输出1,直接调用本函数的 echo $number.PHP_EOL; 即为100
$func();// 101
$func(); //102
$func();//103
6 把匿名函数当作参数传递
<?php
//定义普通函数,anonymous 为参数变量
function myFunc($anonymous){
$anonymous(" test");
}
myFunc(function($username){ //这里调用普通函数,并把 匿名函数作为参数 传给了myFunc中的$anonymous
echo $username;
});//输出 test