Магические методы + Reflection API = не могут исследовать свойства класса. Зачем? - PullRequest
0 голосов
/ 23 апреля 2010

Если я использую магические методы. При использовании отражающего API я не могу исследовать свойства класса. Почему это так?

EDIT

Что такое Reflection API? Пожалуйста, не обращайтесь ко мне php.net я не понял, что .. направьте меня в ваших словах plsss

Ответы [ 2 ]

2 голосов
/ 23 апреля 2010

Используя магические методы для доступа к свойствам, эти свойства обычно не будут присутствовать в определении класса.

Определение вашего класса в целом будет выглядеть так:

class MyClass {
    private $data;
    public function __get($name) {
        return $this->data[$name];
    }
    public function __set($name, $value) {
        $this->data[$name] = $value;
    }
}


Поскольку нет реальных свойств - существует только массив $data, который будет использоваться магическими методами __get __set как большое хранилище данных - они не могутбыть замеченным API Reflection.

Это одна из проблем, вызванных использованием магических методов: они используются для доступа к свойствам (или методам с __call) , которых там нет -- и Reflection API может видеть только то, что там есть.

0 голосов
/ 06 апреля 2013

Возможное решение может заключаться в увеличении области действия $ data до защищенного:

class MyClass {
    protected $data;
    public function __get($name) {
        return $this->data[$name];
    }
    public function __set($name, $value) {
        $this->data[$name] = $value;
    }
}

Таким образом, расширенные классы могут обращаться к массиву по своему усмотрению и собирать определенные во время выполнения свойства.

...