PHP 在父级访问子级的私有(private)属性

标签 php oop serialization protected

我有一个父对象,用于我的应用程序中的一般 CRUD - 它具有基本的保存和检索方法,因此我不必将它们重新包含在我的所有对象中。我的大多数子对象都扩展了这个基础对象。这工作正常,但我发现检索序列化子对象时出现问题。我在创建子实例的父对象中使用“检索”方法,然后从未序列化的子对象的属性填充自身 - 这意味着可以“自行反序列化”对象。

唯一的问题是 - 如果子对象具有 protected 或私有(private)属性,则父对象无法读取它,因此在检索过程中不会获取它。

所以我正在寻找一种更好的“ self 反序列化”方法,或者一种允许父对象“查看” protected 属性的方法——但仅限于在检索过程中。

代码示例:

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

已编辑:应该说“私有(private)”不 protected 子属性。

最佳答案

像这样尝试:

abstract class ParentClass
{
  protected abstract function GetChildProperty();

  public function main()
  {
    $value = $this->GetChildProperty();
  }
}

class ChildClass extends ParentClass
{
  private $priv_prop = "somevalue";

  protected function GetChildProperty()
  {
    return $this->priv_prop;
  }
}

关于PHP 在父级访问子级的私有(private)属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3484165/

相关文章:

java - 如何在Jackson ObjectMapper的序列化中添加@JsonIgnore注释字段

c# - InvalidDataContractException 是无效的集合类型,因为它具有 DataContractAttribute

php - MySQL -- 将 T1 中的 VARCHAR 值插入到 T2 中的 DECIMAL 字段中

java - 绘画应用程序中撤消/重做的命令模式

java - 在 Java 中将对象从一个位置移动到另一个位置

c++ - 继承下基类的OOPS内存分配?

json - 使用 DispatchQueue Swift 迭代 JSONSerialization 中的不同链接

php - mysql 插入数据库没有值

php - 如何在Codeigniter中响应json字符串

php - 更改显示设置后,新的 Drupal 8 安装中出现错误 500(已分配的最大内存)