对象到数组的转换可以作为单独的函数,但不能作为对象方法


Object to array convertion works as separate function but not as object method

I json解码了API的json数据,并希望将对象转换为数组。为此,我编写了一个类函数。这个功能就是

public function objectToArray($result) {
    if (is_object($result)) {
        $result = get_object_vars($result);
    }
    if (is_array($result)) {
        return array_map( @$this->objectToArray, $result);
    }
    else {
        // Return array
        return $result;    
    }
} 

所以上面的代码不起作用。它只转换了"第一层"对象,而没有转换对象数组的对象(我说的是嵌套数组和对象)。但是,当我在类外声明函数objectToArray并将array_map的参数更改为"objectToArry"时,它突然开始工作了。为什么?PHP中类内的递归函数有问题吗?

有什么问题

json_decode($input,true);

当您想使用对象的方法作为回调时,您必须传递一个数组:

array_map(array($this, 'objectToArray'), $result);

如果您没有用@运算符抑制错误,PHP可能会告诉您这一点。

在PHP中,$this->objectToArray是对该名称的属性的引用,而不是对预期的函数的引用。您需要传递一个带有对象实例和方法名称的数组:

return array_map(array($this, 'objectToArray'), $result);