Выполните метод, когда на переменную экземпляра ссылается в классе PHP?
-
10-10-2019 - |
Вопрос
Можно ли запустить функцию при обращении к переменной в классе PHP, а не просто возвращает его значение, аналогично способности JavaScript для переменной удерживать метод?
class LazyClassTest()
{
protected $_lazyInitializedVar;
public function __construct()
{
/* // How can this call and return runWhenReferrenced() when
// someone refers to it outside of the class:
$class = new LazyClass();
$class->lazy;
// Such that $class->lazy calls $this->runWhenReferrenced each
// time it is referred to via $class->lazy?
*/
$this->lazy = $this->runWhenReferrenced();
}
protected function runWhenReferrenced()
{
if (!$this->_lazyInitializedVar) {
$this->_lazyInitializedVar = 'someValue';
}
return $this->_lazyInitializedVar
}
}
Решение
Это звучит как php5.3: лямбда / закрытие / анонимные функции
http://php.net/manual/en/functions.anonymous.php:
<?php
$greet = function($name) {
printf("Hello %s\r\n", $name);
};
$greet('World');
$greet('PHP');
?>
Другие советы
Магический метод PHP5S __get($key)
а также __set($key, $value)
Может быть, вам нужно. Более подробная информация о них доступна в PHP Руководство.
Вы, вероятно, направляетесь в неправильном направлении. Вы обычно хотите определить Getter getLazyVar()
. Анкет Существует причина, по которой люди всегда делают свойства защищенными и определенными геттерами / сеттерами: чтобы они могли предварительно или посточить значения.
Не связан с StackOverflow