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

时间:2015-02-04 10:04:46

标签: php arrays 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()等内部的对象。但是使用强制类型的数组语法,我们能做什么?

由于

EDIT 我发现这篇文章是一个更好地解释我的问题:) Casting object to array - any magic method being called?

答案是:不,你在调用(数组)$ object

时不能要求一个神奇的方法

2 个答案:

答案 0 :(得分:0)

您的代码是正确的,但属性prop是私有的,因此当您尝试打印时会返回如下内容:

Array
(
    [Objprop] => value
)

要将prop作为关键字返回,您应该公开您的财产 或者你可以使getter功能:

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

答案 1 :(得分:0)

从正确的范围调用时,

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)