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
接口和相应的方法,那么一切都可以完全序列化;在这里,我将继续在这里改变它,以便更好地反映场景。也许标题应该是如何序列化子类中的静态变量?