php array_map回调参数范围

use*_*070 9 php scope php-5.3

在下面的代码中,传递给wrap_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);
}
Run Code Online (Sandbox Code Playgroud)

Wri*_*ken 22

因为它在另一个范围内.如果您想使用$wrap,请尝试:

function($val) use ($wrap){
   //etc
}
Run Code Online (Sandbox Code Playgroud)

当然,这里的函数不需要回调:

return $wrap.implode($wrap.$delim.$wrap,$ar).$wrap;
Run Code Online (Sandbox Code Playgroud)