如果在类函数getName()
中声明
然后,如果我打电话obj->name
我猜getName()
必须打电话,但我得到Undefined property name
为什么呢?
答案 0 :(得分:4)
它不是那样的,它更像是这样:
class Foo {
protected $name;
public function getName() {
return $this->name;
}
public function __get($key) {
switch($key) {
case 'name':
return $this->getName();
break;
}
}
}
答案 1 :(得分:1)
这不正确。
你可能指的是神奇的__get
方法,它的工作原理如下:
public function __get($name) {
switch($name) {
case "name":
return "whatever";
}
}
如果您执行whatever
,则会返回$obj->name
。
要从whatever
返回$obj->getName()
,您需要覆盖__call
,如下所示:
public function __call($name, $arguments) {
if (strpos($name, 'get') !== 0) {
return;
}
$name = substr($name, 3);
switch($name) {
case 'Name': // case sensitive!
return 'whatever';
}
}
注意:通常你会得到一个可以在数组中返回的属性的名称,而不是用硬编码的值写一个switch语句(为了更大的灵活性)。
答案 2 :(得分:0)
__get方法的工作原理如下
class Test {
private $var1;
private $var2;
function __construct($1, $2) {
$this->var1 = $1;
$this->var2 = $2;
}
function __get($var) {
return $this->$var;
}
}
因此,如果您创建此类的实例...
$tst = new Test("hello", "world");
print $tst->var1;
结果将是
hello