php запрещает родительскому доступу к дочерним свойствам - PullRequest
0 голосов
/ 25 марта 2012

вопрос прост.У меня есть базовый абстрактный класс (человек).Из этого я расширил еще один класс (пациентов).

Я сохраняю личную информацию (например, имя, фамилию) в таблице PERSONS [есть функция 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.

Спасибо

1 Ответ

1 голос
/ 25 марта 2012

Вы можете сделать это с помощью Reflection (см. 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() (может быть, определен интерфейсом) или что-то подобное. Затем позвольте вашему классу базы данных вызвать эту функцию, чтобы получить список свойств хранить в базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...