讨论写法,形式如下,调用以闭包为参数的函数
getValues(...$attrib)
含义。
以下是一个获取$attribs数组键为value的值Edward复杂写法。这种算是自找虐吧。
$attribs = [
'name' => 'first_name',
'value' => 'Edward'
];
$ex = function ($t) use ($attribs) { // ... then we 'use' the actual array here
foreach(array_keys($attribs) as $k => $v){
if(current($t) == $v){
return
$attribs[$v];
}} };
function getValues($request,Closure $next){
return $next($request);
}
$attrib = [array('attr'=>'value'),$ex];
print_r(getValues(...$attrib));
调用
getValues(...$attrib)
它的实际运行过程是这样的,$attrib是一个数组和闭包函数综合体,...$attrib前面...会自动将$attrib中的第一个非闭包值取出这里是一个数组,后面的第二个值是一个闭包,它会直接传递给闭包,并将刚刚取出的非闭包值传递给闭包函数当做参数。
其实这只是一种写法
getValues(...$attrib)
它是由一下因素决定:一是调用函数getValue参数个数,上面是两个。
二是外界传递的参数形式[],例如上面的[aray(),$ex]形式。
三是匿名函数本身function($a) use ($k){}。
其实要将函数写成function getKeys($request,$dd,Closure $next)形式,就要将参数写成$attrib = [array('attr'=>'value'),array("ssss"),array("dddd"),$ex];形式。数组以一维各个值的形式对应函数中各个参数。在函数里面要怎么处理就看你自己了。
--------------------------------------------------------------------------------------------------------------------
其实以上是php5.6及以上的版本才支持的写法,php5.6以下的就会报错的,例如php5.5。若需要测试可以到线上在线编辑做测试。
https://www.shucunwang.com/RunCode/php5.6/。