猿问

关于array_walk()回调函数参数

这里课程代码是

array_walk($fields, array('PdoMySQL', 'addSpecilChar'));
但是我看官方文档的是
bool array_walk ( array &$array , callable $funcname [, mixed $userdata = 
NULL ] )
后面的参数为什么不是方法名而是一个数组呢,数组的PdoMySQL的含义又是?
后面的
public static function parseFields($fields){
    if(is_array($fields)){
        array_walk($fields, array('PdoMySQL', 'addSpecilChar'));
        $fieldsStr = implode(',', $fields);
    }elseif(is_string($fields) && !empty($fields)){
        if(strpos($fields, '`') === false){
            $fields = explode(',', $fields);
            array_walk($fields, array('PdoMySQL', 'addSpecilChar'));
            $fieldsStr = implode(',', $fields);
        }else{
            $fieldsStr = $fields;
        }
    }else{
        $fieldsStr = '*';
    }

    return $fieldsStr;
}
为什么参数要是引用的形式传入,这样传入参数后为什么还要返回它,这样就不需要返回了吧


慕码人2809647
浏览 1499回答 1
1回答

茶花烙

关于array_walkarray_walk($fields, array('PdoMySQL', 'addSpecilChar'));这个是在一个类的内部使用array_walk,即把$fields通过PdoMySQL这个类中的addSpecilchar方法进行过滤。你后面的那个 parseFields方法没看到有引用传参,所以处理后需要有返回值。引用传参是会改变原始数据的,array_walk(&$array,$functionname),但是此种方式不应该改变原始数据的结构,比如说数组,不应该添加元素或者删除元素,因为这有可能出现不可预知的后果。
随时随地看视频慕课网APP
我要回答