2011-03-31 42 views
9

在以下代碼中,傳遞給wrap_map的回調函數無法在外部函數中看到參數,爲什麼? (詳見代碼註釋)php array_map回調參數範圍

public static function wrap_implode($ar, $wrap, $delim){ 
    echo "wrap is $wrap"; //wrap is ok 
    $res = array_map(function($val){ 
    echo "wrap is $wrap"; //wrap is not set here! 
    return $wrap. $val . $wrap; 
    }, $ar); 

    return implode($delim, $res); 
} 

回答

22

因爲它在另一個範圍內。如果你想使用$wrap,嘗試:

function($val) use ($wrap){ 
    //etc 
} 

當然,在這裏你的功能並不需要一個回調:

return $wrap.implode($wrap.$delim.$wrap,$ar).$wrap; 
+0

冷卻使用關鍵字(函數),我學到了一些東西: ) – FMaz008 2011-12-06 19:51:13