我有以下分類:更改對象串行化是
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類中的私有值,以便進行序列化和非序列化。
我該怎麼做?