匿名函数(anonymous function),也叫闭包函数(closures),允许临时创建一个没有指定名称的函数,最经常用作回调函数(callback)参数的值。
匿名函数的实现匿名函数是目前是通过closure类来实现,匿名函数会产生这个类的对象。自php 5.4起,这个类带有一些方法,允许在匿名函数创建后对其进行更多的控制。
fc430c7db1eecf4621f4fc8a5479f894
注意:php手册特别说明__invoke()这个魔术方法与匿名函数的实现过程无关。
closure类如下:
closure { /* 方法 */ __construct ( void ) public static closure bind ( closure $closure , object $newthis [, mixed $newscope = 'static' ] ) public closure bindto ( object $newthis [, mixed $newscope = 'static' ] ) }closure::__construct — 用于禁止实例化的构造函数closure::bind — 复制一个闭包,绑定指定的$this对象和类作用域。closure::bindto — 复制当前闭包对象,绑定指定的$this对象和类作用域。
匿名函数例子:
$func = function($str){ echo $str;};$func('hello');
闭包
闭包是指在创建时封装周围状态(如变量)的函数,即使闭包所在的环境的不存在了,闭包中封装的状态依然存在。
闭包的实现将匿名函数放在一个普通函数中(也可以将匿名函数返回),就构成了一个闭包。
function closurefunc(){ $func = function(){ echo 'hello'; } $func();}closurefunc();//输出:hello
闭包的使用在匿名函数中引入局部变量时需要用到use关键字。这是因为php中的变量范围只在它的生效范围中。在匿名函数里并没有对变量进行定义,所以需要使用use关键字
function closurefunc1(){ $num = 1; $func = function() use($num){ echo $num; }; $func();}closurefunc2();//输出
闭包返回匿名函数并传参
function closurefunc2(){ $num = 1; $func = function($str) use($num){ echo $num; echo $str; }; return $func;}$func = $closurefunc2();$func('hello');//输出 1 hello
以上,欢迎讨论~
把闭包简单理解成“定义在一个函数内部的函数”。
所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。
四、闭包的用途
闭包可以用在许多地方。它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。