我试图从类的方法中触发__get。见下文。我想如果我试图通过$ this->用户获取属性,那么__get将被触发。但是,它似乎并非如此。这可能在PHP?或者它是否仅适用于外部流程(例如$ test->用户确实触发它)
<?php
class Test
{
protected $user = 'Mario';
public function __get($name)
{
echo "Getting '$name'\n";
}
public function doSomething()
{
$user = $this->user; // doesn't trigger __get
//...
}
}
$test = new Test;
$test->doSomething();
//echo $test->user; // this does trigger __get
答案 0 :(得分:0)
在课程内部,$user
可见,因此无需拨打__get
。仅当在类外部无法解析属性时才调用__get
(如果将其更改为公共而不是受保护,则不会从类外部调用__get
)
如果您想在这种情况下强制拨打__get
,则必须明确地将其称为$this->__get('user')
。