PHP匿名函数(Anonymous functions),又称为闭包(Closure)
简介在学习Laravel核心代码的时候,在容器注册的过程中,看到了Closure。平时在使用PHP的过程中,自己使用闭包还是比较少的,所以本文将介绍下PHP的闭包Closure。
PHP的闭包(Closure),其实也叫匿名函数。可以参考PHP的官方文档:http://www.php.net/manual/zh/functions.anonymous.php 匿名函数就是创建一个没有名称的函数,主要作为回调函数来进行使用。匿名函数目前是通过 Closure 类来实现的,需要学习Closure类的请前往:http://php.net/manual/zh/class.closure.php。
基本使用
1、闭包函数作为变量的值
//定义一个匿名函数,作为一个变量的值
$func = function () {
return 'Hello World';
};
//PHP 会自动把此种表达式转换成内置类 Closure 的对象实例
var_dump($func instanceof Closure);//结果输出:true,说明匿名函数目前是通过Closure 类来实现的
echo $func();//结果为 Hello world
2、闭包函数也可传递参数
//定义一个含有参数的匿名函数
$func = function ($string) {
return $string;
};
echo $func('Hello');//结果为:Hello
echo $func('World');//结果为:World
3、闭包函数可以从作用域中继承变量,但是必须使用use语言结构传递进去
$param = 'hello';
//在使用$param的时候,前面必须先定义该变量,否则会提示:Undefined variable: param
$func = function () use ($param) {
return $param;
};
echo $func();//输出hello
//这里改变param的值
$param = 'world';
echo $func();//输出hello,说明param值的改变不会对闭包函数中的值进行修改,如果需要对其进行修改,就需要传递引用
$param = 'Hello';
$func1 = function () use(&$param){
return $param;
};
echo $func1();//输出Hello
$param = "World";
echo $func1();//输出World
4、回调函数
//定义一个接收参数为闭包函数的方法
function testCallBack(Closure $callback)
{
return $callback();
}
$func = function () {
return 'Hello World';
};
//传递定义好闭包函数的变量进去
echo testCallBack($func);//输出:Hello World
//直接传递闭包进去
echo testCallBack(function (){
return 'Closure';
});//输出:Closure