繁体   English   中英

php防止父级访问子级属性

[英]php prevent parent from accessing child properties

问题很简单。 我有一个基本的抽象类(人)。 由此,我扩展了另一类(患者)。

我将个人信息(例如名字,姓氏)保存在PERSONS表中[存在ADD函数。 ]。 患者特定信息(例如疾病,药物等)被保存到单独的PATIENTS类中。 [有一个调用父级的ADD函数,然后是一些代码]。

如何防止人的add函数访问在其孩子,患者内部定义的属性?

为了更清楚,这里是一个示例代码:

class P {
public P_var = 'Anoush' ; 
public function add ()
{
  // find all properties:
  foreach ($this as $prop => $val )
  {
     $insertables [$prop] = $val ; 
  }
  // insert all VALUES FIELDSET etc. based on the array created above 

}

class CH extends P {
public CH_var1 = 'ravan' ; 
public CH_var2 = 'something' ; 
}

然后,当我调用add时, $insertables将包含P_var,CH_var1,CH_var2。 我只希望它具有P_var。

谢谢

您可以通过使用Reflection实现(请参阅http://www.php.net/manual/zh/book.reflection.php )。

class Parent {
    public function add() {
        $insertables = $this->_getOwnProperties(__CLASS__);
        // ...
    }

    protected function _getOwnProperties($className) {
        $reflection = new ReflectionClass($this);
        $props = array();

        foreach ($reflection->getProperties() as $name => $prop) {
            if ($prop->class == $className) {
                $props[$name] = $prop;
            }
        }

        return $props;
    }
}

但是,我建议您重构代码,以获得更简洁的解决方案(例如,添加方法getProperties() (可能由接口定义)等),然后让您的数据库类调用该函数以获取要存储的属性列表数据库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM