Перехват обращение к свойству объекта? Есть ли возможность в php перехватить обращение к свойству? Допусти у объекта data есть свойство param, по умолчанию оно пустое, при первом обращении к param что бы можно было выполнить опр. метод для его заполнения и в дальнейшем если не пустое то не вызывать метод заполнения.
Да, в PHP существует магический метод __get(), который позволяет перехватить обращение к несуществующему или защищенному свойству объекта.
Пример:
class Data { private $param = ''; public function __get($name) { if ($name == 'param') { if ($this->param == '') { $this->param = $this->initializeParam(); } return $this->param; } } private function initializeParam() { // логика инициализации свойства param return 'initialized value'; } } $data = new Data(); echo $data->param; // инициализируется свойство param и выводится 'initialized value' echo $data->param; // не инициализируется повторно, выводится 'initialized value'
Таким образом, при обращении к свойству param будет вызываться метод initializeParam() только при первом обращении, далее значение будет возвращаться напрямую.
Да, в PHP существует магический метод __get(), который позволяет перехватить обращение к несуществующему или защищенному свойству объекта.
Пример:
class Data {private $param = '';
public function __get($name) {
if ($name == 'param') {
if ($this->param == '') {
$this->param = $this->initializeParam();
}
return $this->param;
}
}
private function initializeParam() {
// логика инициализации свойства param
return 'initialized value';
}
}
$data = new Data();
echo $data->param; // инициализируется свойство param и выводится 'initialized value'
echo $data->param; // не инициализируется повторно, выводится 'initialized value'
Таким образом, при обращении к свойству param будет вызываться метод initializeParam() только при первом обращении, далее значение будет возвращаться напрямую.