Выполнить метод, когда на переменную экземпляра ссылаются в классе PHP? - PullRequest
0 голосов
/ 12 января 2011

Можно ли запускать функцию при обращении к переменной в классе 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
    }

}

Ответы [ 3 ]

2 голосов
/ 12 января 2011

PHP5s магический метод __get($key) и __set($key, $value) может быть то, что вам нужно. Более подробная информация о них доступна в руководстве по PHP .

1 голос
/ 12 января 2011

Это звучит как PHP5.3: лямбда / замыкания / анонимные функции

http://php.net/manual/en/functions.anonymous.php:

<?php
$greet = function($name) {
    printf("Hello %s\r\n", $name);
};

$greet('World');
$greet('PHP');
?>
1 голос
/ 12 января 2011

Вы, вероятно, движетесь в неправильном направлении. Обычно вы хотите определить получатель getLazyVar(). Существует причина, по которой люди всегда делают свойства защищенными и определяют методы получения / установки: поэтому они могут предварительно или постобработать значения.

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