匿名函数目前是通过 Closure 类来实现的。
闭包函数也可以作为变量的值来使用。PHP 会自动把此种表达式转换成内置类 Closure 的对象实例。把一个 closure 对象赋值给一个变量的方式与普通变量赋值的语法是一样的,最后也要加上分号:
闭包可以从父作用域中继承变量。 任何此类变量都应该用 use 语言结构传递进去。 PHP 7.1 起,不能传入此类变量: superglobals、 $this 或者和参数重名。
具体形式如下:
$a = function($arg1, $arg2) use ($variable) { // 声明函数闭包到变量$a, 参数为$arg1, $arg2 ,该闭包需使用$variable变量 }
具体用法实例如下:
<?php $result = 0; $one = function() { var_dump($result); }; $two = function() use ($result) { var_dump($result); }; // 可以认为 $two这个变量 本身记录了该函数的声明以及use使用的变量的值 $three = function() use (&$result) { var_dump($result); }; $result++; $one(); // outputs NULL: $result is not in scope $two(); // outputs int(0): $result was copied $three(); // outputs int(1) ?>