您的位置:首页 > 编程语言 > PHP开发

php含有闭包特殊使用

2017-06-02 17:57 155 查看
讨论写法,形式如下,调用以闭包为参数的函数

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/。

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: