php含有闭包特殊使用

讨论写法,形式如下,调用以闭包为参数的函数

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


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值