匿名函数:没有名字的函数;并没有牵扯到应用其他函数的变量问题。仅仅是没有名字
$f=function($param){}
闭包:A函数中嵌套着B函数,B程序中有用到A的变量,当外部函数C调用函数A时,虽然A已经执行完毕,理论上函数执行完毕,它就要被弹出栈,但是由于B要用到A,所以A的变量被保存到内存中不被销毁,我们称函数B是闭包(即函数中存在另一个函数,则可称为闭包函数)
#定义普通函数 function demo($callback){ $callback('param'); } #将上面的匿名函数传入普通函数的参数中 #不管匿名函数还是普通函数在执行完之后都会销毁但是当匿名函数被传入参数中时他执行完后不会被销毁 这个就是闭包函数了 demo($f);#等同于: demo(function($param){ }) #闭包函数2: function demo() { $f= function( $str ) { echo $str; }; $f( 'some string' ); } demo();
#闭包函数3 function demo() { $f= function( $str ) { echo $str; }; #返回匿名函数 return $f; } $f=demo(); $f('param')
判断是否是闭包函数
if ($f instanceof Closure) { }