基本概念
匿名函数:没有名字的函数
基本语法:
变量名=function(){函数体;}; 大括号后面一定要有分号" ; ",否则会报错
<?php
//定义匿名函数
$func=function(){
echo 'hello world';
};
//调用匿名函数,有点像可变函数
$func();
?>
变量保存匿名函数,本质得到的是一个对象,(closure),闭包
闭包(closure),来源于以下两者的结合,要执行的代码块(由于自由变量被包含在代码块中,这些自由变量以及它们引用的对象没有被释放)和为自由变量提供绑定的计算环境(作用域)
简单理解:
函数内部有一些局部变量,(要执行的代码块)在函数执行之后没有被释放,是一位在函数内部还有对应的函数在引用(函数的内部函数:匿名函数)
<?php
function display(){
//定义局部变量,当函数执行完毕后,该变量会被释放
$name=__FUNCTION__;
//定义闭包 use就是将外部变量(局部),保留给内部使用
$func=function() use($name){
echo $name;
};
$func();
}
display();
?>
证明:函数的局部变量咋I函数使用完之后没有被释放?
1.使用内部匿名函数
2.匿名函数使用局部变量 use
3.匿名函数被返回给外部使用
<?php
function display(){
//定义局部变量,当函数执行完毕后,该变量会被释放
$name=__FUNCTION__;
//定义闭包 use就是将外部变量(局部),保留给内部使用
$func=function() use($name){
echo $name;
};
//返回内部匿名函数
return $func;
}
$closure=display();
//以上位置:display函数运行结束:理论上局部变量$name应该结束
$closure();
//$name没有被释放。
?>