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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章