是啊,
楼上错解。
$this->proName; 其实就是在访问对象的proName属性,但是这个属性是不存在的,所以肯定报错。
你一定是觉得proName会被替换成$proName的值吧。
你肯定纳闷过为什么类的属性在定义的时候要$,如$aa,但访问的时候却不需要,如$this->aa;
原因就在于此,为了避免歧义。
__get的真正用法是这样的:
class Demo{ private $pro = array(); public __set($name, $value){ $this->pro[$name] = $value; } public __get($name){ if(isset($this->pro[$name])){ return isset($this->pro[$name]; } return null; } }
有什么不懂得去看手册吧,PHP的手册是最详细的。
举个简单的例子,当类里面没有属性$name; 但是你不小心访问这个属性,这个时候就会出错。但是让你可以设置魔术方法__get($name){ return $name . "不存在"};就会自动调用__get($name);这样程序就会不因为你访问了一个不存在的属性报错而中断执行
这个需要了解魔术方法__get/__set方法的特性,如果该类中有定义魔术方法,当访问不存在的属性时,__get方法就会被调用,有多少属性不存在,程序就会显示多少提示(这个可以在魔术方法中自定义的),__set方法同理
好好!!