php阻止父访问子属性

时间:2012-03-25 15:25:46

标签: php oop

问题很简单。我有一个基础抽象类(人)。从此我扩展了另一个班(病人)。

我在PERSONS表中保存个人信息(例如姓名,姓氏)[有ADD功能。 ]。患者特定信息(如疾病,药物......)将保存到单独的PATIENTS类中。 [有一个调用父节点的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。

由于

1 个答案:

答案 0 :(得分:1)

您可以使用反射执行此操作(请参阅http://www.php.net/manual/en/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()(可能由接口定义)或其他。然后让数据库类调用该函数以获取列表存储在数据库中的属性。