什么是匿名函数?
匿名函数(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 . '%';
}
],
?>