我在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。
由于
答案 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()
(可能由接口定义)或其他。然后让数据库类调用该函数以获取列表存储在数据库中的属性。