2011-03-31 10 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