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)
有没有办法在调用这段代码时将对象序列化为数组:
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)