问答详情
源自:5-5 魔术方法之__isset和__unset方法

当isset方法return true时会调用__get()方法,且用empty判断时返回值都是1

当isset方法return true时会调用__get()方法,且用empty判断时返回值都是155b455c30001909505000291.jpg


55b455c300012d0304570232.jpg

55b455c30001af9905000272.jpg

55b455c400018dc504860200.jpg


提问者:隐匿山猫 2015-07-26 11:39

个回答

  • 干锅钱
    2017-02-14 13:54:54

    __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。

  • 方俊
    2016-01-08 22:19:28

    在第二张截图中   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);

    按照我的写法 是正常显示的啊    你在试试