【发布时间】:2018-01-09 08:27:13
【问题描述】:
我有一个如下所示的对象树,我需要对其进行序列化并存储在文件系统中。我需要具有所有类属性的完整层次结构,稍后我将反序列化并恢复类层次结构。
class X implements \Serializable {
private $x1;
public function serialize() {
return serialize(get_class_vars(get_class($this)));
}
public function unserialize($data) {
$values = unserialize($data);
foreach ($values as $key => $value) {
$this->$key = $value;
}
}
}
class A implements \Serializable {
private $a1;
private $a2;
// type of a3 is class X!
protected $a3;
public function serialize() {
return serialize(get_class_vars(get_class($this)));
}
public function unserialize($data) {
$values = unserialize($data);
foreach ($values as $key => $value) {
$this->$key = $value;
}
}
}
class B extends A implements \Serializable {
private $b1;
private $b2;
public function serialize() {
// $base = parent::serialize();
return serialize(get_class_vars(get_class($this)));
}
public function unserialize($data) {
$values = unserialize($data);
foreach ($values as $key => $value) {
$this->$key = $value;
}
}
}
class C extends A implements \Serializable {
private $c1;
private $c2;
public function serialize() {
// $base = parent::serialize();
return serialize(get_class_vars(get_class($this)));
}
public function unserialize($data) {
$values = unserialize($data);
foreach ($values as $key => $value) {
$this->$key = $value;
}
}
}
子类可以自己序列化,但是对于基类我不知道如何组合序列化的数据。此外,我从文件系统获取序列化数据,但我不知道我会得到哪个子类。 PHP 的 unserialize() 是否创建了正确的类实例?它还应该初始化基类 A。
我该如何解决?
也许我可以使用 var_dump() 输出,但如何将其存储到变量中?
【问题讨论】:
标签: php oop serialization