PHP: 通过 (array) $object 将对象序列化为数组

PHP: serialize as array an object via (array) $object

有没有办法在调用这段代码时将对象序列化为数组:

class Obj {
    private $prop;
    public function __construct($v) {
       $this->prop = $v;
    }
}

$object = new Obj('value');
$result = (array) $object;

print_r($result);

// should display something like Array ( prop => value )
// via a magic function call in the object ?

一些 ArrayObject、Traversable 和其他东西可以帮助使用 foreach、count() 等内部的对象。但是有了强制类型化的数组语法,我们能做什么呢?

谢谢

编辑 我发现这个 post 这个问题比我的解释得更好 :) Casting object to array - any magic method being called?

答案是:不可以,调用(array)$object时不能要求魔法方法

您的代码是正确的,但是 属性 prop 是私有的,因此当您尝试打印时 return 会是这样的:

Array
(
    [Objprop] => value
)

为了 return prop 作为密钥,你应该使你的 属性 public 或者你可以使 getter 函数:

public function getV(){
     return $this->v;
}

get_object_vars 从正确范围调用时忽略可见性声明:

class Obj {
    private $prop;
    public function __construct($v) {
        $this->prop = $v;
    }
    public function asArray() {
        return get_object_vars($this);
    }
}

$object = new Obj('value');
$result = $object->asArray();

print_r($result); // Array([prop] => value)