【PHP】匿名函数和闭包

匿名函数


匿名函数的语法是:
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

猜你喜欢

转载自blog.csdn.net/qq_44899247/article/details/105956355
今日推荐