【发布时间】:2011-03-29 21:20:49
【问题描述】:
我有一个父对象,用于在我的应用程序中进行一般 CRUD - 它具有基本的保存和检索方法,因此我不必将它们重新包含在我的所有对象中。我的大多数子对象都扩展了这个基础对象。这工作正常,但我发现检索序列化子对象存在问题。我在创建子对象实例的父对象中使用“检索”方法,然后从未序列化子对象的属性中填充自身 - 这意味着可以“自我反序列化”对象。
唯一的问题是 - 如果子对象具有受保护或私有属性,则父对象无法读取它,因此在检索期间不会被拾取。
所以我正在寻找一种更好的“自我反序列化”方法,或者一种允许父对象“看到”受保护属性的方法 - 但仅限于检索过程中。
代码示例:
BaseObject {
protected $someparentProperty;
public function retrieve() {
$serialized = file_get_contents(SOME_FILENAME);
$temp = unserialize($serialized);
foreach($temp as $propertyName => $propertyValue) {
$this->$propertyName = $propertyValue;
}
}
public function save() {
file_put_contents(SOME_FILENAME, serialize($this));
}
}
class ChildObject extends BaseObject {
private $unretrievableProperty;
public setProp($val) {
$this->unretrivableProperty = $val;
}
}
$tester = new ChildObject();
$tester->setProp("test");
$tester->save();
$cleanTester = new ChildObject();
$cleanTester->retrieve();
// $cleanTester->unretrievableProperty will not be set
已编辑:应该说“私人”不受保护的子属性。
【问题讨论】:
标签: php oop serialization protected