PHP序列化和继承
不确定序列化正在实现PHP序列化和继承,php,serialization,Php,Serialization,不确定序列化正在实现Serializable接口的子类的过程是什么,父类不再保留它曾经序列化的数据。有没有我错过的一步 class A { private $aVar = "test"; } class B extends A implements Serializable { private static $bVar = "tset"; public function serialize() { return serialize(self::$bVa
Serializable
接口的子类的过程是什么,父类不再保留它曾经序列化的数据。有没有我错过的一步
class A {
private $aVar = "test";
}
class B extends A implements Serializable {
private static $bVar = "tset";
public function serialize() {
return serialize(self::$bVar);
}
public function unserialize($serialized) {
self::$bVar = unserialize($serialized);
}
}
$s = serialize(new B());
$u = unserialize($s);
我认为您对这里发生的事情有点困惑,但实际上您看到的是范围不正确的变量
- 公共变量是所有类可见的变量
- 私有变量,是仅对所属类可见的变量
- 受保护变量,是仅对其所属的类和任何子类可见的变量
$aVar
设置为受保护或公开的A类
,您可以在B类
中访问它:
您将得到以下结果:
B Object
(
[bVar:B:private] => tset
[aVar] => test
)
但我不想访问它;如果我要删除
Serializable
接口和相应的方法,那么一切都可以完全序列化;在这里,我将继续在这里改变它,以便更好地反映场景。也许标题应该是如何序列化子类中的静态变量?