什么是匿名函数?

匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值。当然,也有其它应用的情况。

匿名函数目前是通过 Closure 类来实现的。

在PHP 4最早称callback,PHP 5.3引入closure与anonymous function,PHP 5.4则新增callabletype hint。
所以在PHP中,callback、closure、anonymous function,与callable,事实上指的是同一件事情,但因为底层用的都是Closure物件,通常统称为closure。

匿名函数变量

<?php
$greet = function($name)
{
    printf("Hello %s\r\n", $name);
};

$greet('World');
$greet('PHP');
#result
#Hello World
?>

闭包可以从父作用域中继承变量。 任何此类变量都应该用 use 语言结构传递进去。 PHP 7.1 起,不能传入此类变量: superglobals、 $this 或者和参数重名。

从父作用域继承变量

$message = 'hello'
$example = function () use ($message) {
    var_dump($message);
};
echo $example();
#result
#hello 

YII2中,在视图GridView挂件中,自定义属性如果想获取外部的值,就需要使用此方式

$message = 'new message'
 <?= GridView::widget([
                'dataProvider' => $dataProvider,
                    [
                        'format'=>'raw',
                        'attribute' => 'order_conversion',
                        'value' => function($data) {
                            #这里获取不到message的值.
                            return $message;
                        }
                    ],


                    [
                        'format'=>'raw',
                        'attribute' => 'order_conversion',
                        #这里是正确写法
                        'value' => function($data) use ($message) {
                            return $message;
                            return  $data->order_conversion . '%';
                        }
                    ],
 ?>