討論寫法,形式如下,調用以閉包爲參數的函數
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/。