我有以下类树:
class A /* Base class */
{
private/protected/public $state
}
class B extends A /* Auto generated class, not to be modified */
{
private $v
public function getV() { return $this->v; }
public function setV($val) { $this->v = $val; }
}
class C extends B { /* Custom code */ }
只有一个类 A。有多个类,如 B 类,所有这些类都会有一个像 C 一样的子类。B 类是自动生成的,不应修改。
我在会话中存储类型 C 的对象。我想要做的是在每个实例中存储一些状态信息,就在 PHP 将其序列化之前,它会在它被反序列化时对其进行处理。我希望所有这些都在 A 类中实现。
考虑到,我需要使用__sleep()
或者Serializable
接口。使用__sleep
是不可能的,因为 PHP 手册说:
__sleep() 不可能返回父类中私有属性的名称。这样做会导致 E_NOTICE 级别错误。相反,您可以使用 Serializable 接口。
这意味着如果我睡一个 C 类的实例,我将失去在 B 中声明的私有变量。所以我想使用 Serializable,但由于某种原因,我根本无法让它做我想做的事。
本质上,我希望对象被序列化,就像我自己没有实现任何序列化一样,我只想$state
在它发生之前添加信息。我已经尝试用 覆盖所有数据ReflectionObject->getProperties()
,但我似乎找不到正确的方法来获取和设置 B 类中的私有值以进行序列化和反序列化。
我该怎么做呢?