隐匿山猫
2015-07-26 11:39
当isset方法return true时会调用__get()方法,且用empty判断时返回值都是1
__get方法如果不返回值的话empty()就一直返回true,在empty()调用时会先调用__isset再调用__get,__isset返回false,empty()就与之相反取true而不会调用__get,__isset返回true,就会调用__get,当有返回值时相当于true,所以结果为false,这相当于一个或关系。empty(false|true) = true|false = true,empty(true|true)=false|false=false。
在第二张截图中 getting the property classname 这个值是从哪里来的啊
class MagicTest{ public function __get($name){ return "Getting the property".$name."<br/>"; } public function __set($name,$value){ echo "setting the property".$name."to value".$value."<br/>"; } public function __isset($name){ echo "__isset invoked<br/>"; return true; } public function __unset($name){ echo "unsetting property".$name."<br/>"; } } $obj=new MagicTest(); echo $obj->className."<br/>"; $obj->className="MagicClassX"."<br/>"; echo '$obj->className is set?'.isset($obj->className)."<br/>"; echo '$obj->className is empty?'.empty($obj->className)."<br/>"; unset($obj->className);
按照我的写法 是正常显示的啊 你在试试
PHP面向对象编程
70199 学习 · 369 问题
相似问题