假设我们有这个代码:
class SomeClass{
private $somePrivateField;
public function __get($name){
$function = "get".ucfirst($name);
return $function;
}
public function __set($name,$value){
$function = "set".ucfirst($name);
return $function($value);
}
public function __call($name, $arguments) {
//if function being called is getSomething
//getThat private/protected field if exists and return
//if not raise exception
// similar for setSomething...
}
}
这是一些教程的一段话:
__get() 方法接受一个参数,该参数表示正在设置的属性的名称。在 $obj->property 的情况下,参数将是属性。
然后我们的 __get() 方法将其转换为 getProperty,它与我们在 __call() 方法中定义的模式相匹配。这意味着$obj->property会先尝试设置一个同名的公共属性,然后去__get(),然后尝试调用公共方法setProperty(),然后去__call(),最后设置受保护的 $_property。
所以当我在代码中的某个地方说
$obj->property
我可以理解它首先尝试访问公共字段。为什么它首先进入 __get() ?为什么不 __set() ?那为什么会去 __set() 呢?
有人可以解释一下吗?谢谢...