匿名函数
匿名函数的语法是:
function(){
//函数体
};//注意分号
因为这样的函数无法运行,所以一般都会保存到变量里:
$func = function(){
echo 'Hello World';
};
然后调用的时候就类似回调函数就可以了
$func();
那么为什么要有匿名函数呢?
原因是:
变量保存一个函数,实质上是得到一个对象(closure)
也就是闭包
闭包
大概意思是,内部函数可以访问外部函数的变量,即使外部函数已经结束(返回)。
正常情况下函数返回意味着释放,即里面的变量就没了,访问不到了。但是闭包可以阻止其释放,不被系统回收。
比如
function display(){
//定义一个局部变量
$name = 'tattoo';
//定义匿名函数
$innerfunction = function(){
echo $name;//这里试图调用外面的name函数
}
}
display();
结果肯定是会报错的,因为name无法传入innerfunction里
那怎么样才可以连接匿名函数与外面的函数呢?
可以在function后面添加一个use
function display(){
//定义一个局部变量
$name = 'tattoo';
//定义匿名函数
$innerfunction = function() use($name){
echo $name;//这里试图调用外面的name函数
}
}
display();
这样就形成了闭包。
结合一下以前学过的传参的知识,可以知道:上面use使用的name变量,其实还是复制版本,不会实际更改原name的值
所以可以写成&$name