我正在尝试为php对象实现一些自动getter和setter。
我的目标是为每个属性自动拥有方法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"
关于如何实现这一点的任何想法/提示?
答案 0 :(得分:23)
如果要为任意属性模拟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];
}
}
通过添加类型图或任何内容,这将是一次有用的事情的好机会。否则,完全避开getters and setters可能是明智之举。
答案 1 :(得分:3)
阅读magic functions of php
,您需要使用__get and __set
函数