PHP автоматический сеттер и геттер - PullRequest
8 голосов
/ 05 января 2012

Я пытаюсь реализовать некоторые автоматизированные методы получения и установки для объектов php.

Моя цель - автоматически назначать для каждого свойства методы getProperty() и setProperty(value), если метод неРеализованный для свойства, скрипт просто установит или получит значение.

Пример, чтобы прояснить ситуацию:

class Foo {
    public $Bar;
}

$A = new A();
$A->setBar("bar");
$A->getBar(); // -> output "bar"

или

class Foo {
    public $Bar;
    public function setBar($bar) { $Bar = $bar; }
    public function getBar($bar) { return 'the value is: ' . $bar; }
}

$A = new A();
$A->setBar("bar");
$A->getBar(); // -> output "the value is: bar"

Любая идея /намеки на то, как этого добиться?

Ответы [ 2 ]

24 голосов
/ 05 января 2012

Если вы хотите смоделировать функции getXy и setXy для произвольных свойств, используйте магическую оболочку __call:

function __call($method, $params) {

     $var = lcfirst(substr($method, 3));

     if (strncasecmp($method, "get", 3) === 0) {
         return $this->$var;
     }
     if (strncasecmp($method, "set", 3) === 0) {
         $this->$var = $params[0];
     }
}

Это было бы хорошовозможность сделать что-то полезное за один раз, добавив карту типов или что-нибудь.В противном случае рекомендуется избегать геттеров и сеттеров в целом.

3 голосов
/ 05 января 2012

прочитайте magic functions of php и вам нужно использовать __get and __set функции

прочитать это

...