今天开发项目时,使用array_map遇到的问题记录。 下面是在官网找到的例子: function show_Spanish($n, $m) { return("The number $n is called $m in Spanish"); } function map_Spanish($n, $m) { return(array($n => $m)); } $a = array(1, 2, 3, 4, 5); $b = array("uno", "dos", "tres", "cuatro", "cinco"); $c = array_map("show_Spanish", $a, $b); print_r($c); $d = array_map("map_Spanish", $a , $b); print_r($d); 但我的函数是 public static function _getRelate($arr, $sType) { $arr = array_map(function($val) use ($sType) { if($sType == 'branch') { $val['catid'] = FormatService::getBranchByCatid($val['branch']); } if($sType == 'catid') { $val['catid'] = FormatService::getBranchByCatid($val['catid']); } return $val; }, $arr); return $arr; } 首先我要使用$sType这个参数,若直接使用,则会报错,未定义。因为在回调函数中,有作用域的问题,so 使用use关键字,声明$sType的作用域,之后可以在回调中正常使用; 其次,当我再回调中使用其他函数时,即使是本类中的方法,也不可以使用 $this 或者 self 关键字,需使用当前类名然后去调用,否则会报"Fatal error: Cannot access self:: when no class scope is active in"。