调用此代码时,有没有办法将对象序列化为数组:
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
时不能要求一个神奇的方法答案 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)