dongliu8559 2014-09-11 05:31
浏览 425
已采纳

Yii:使用getIsGuest()或isGuest

So far, when I wanted to know if the user is logged in or not I used Yii::app()->user->isGuest.

However, there is a method called getIsGuest(), which returns the isGuest variable.

if (!Yii::app()->user->getIsGuest())

My question is, should I use getIsGuest() instead? Using getIsGuest() is the proper way? Or it does not matter and they both correct ways?

  • 写回答

2条回答 默认 最新

  • dongyin2885 2014-09-11 06:38
    关注

    Actually, there is no difference between $class->getAttribute() and $class->attribute. But this is good to know what is going on in behind.

    Yii widely uses php magic methods. In this case, it uses __set and __get magic methods to implement getters and setters. As php's official documents defines __get() :

    __get() is utilized for reading data from inaccessible properties.

    Consider an example:

    class Test{
        private $attribute;
        private $attribute2;
        private $attribute3;
        public function getAttribute(){
            return $this->attribute;
        }
        public function getAttribute2(){
            return $this->attribute2;
        }
        public function getAttribute3(){
            return $this->attribute3;
        }
    }
    

    If you want to get the attribute property value you must call getAttribute() method and you can not get attribute like below (since you have no access to attribute property):

    $test=new Test();
    echo $test->attribute;    
    

    But with __get magic method it can be implemented as:

    class Test{
        private $attribute;
        private $attribute2;
        private $attribute3;
        //__GET MAGIC METHOD
        public function __get($name)
        {
            $getter='get'.$name;
            if(method_exists($this,$getter))
            return $this->$getter();
        }
    
        public function getAttribute(){
            return $this->attribute;
        }
        public function getAttribute2(){
            return $this->attribute2;
        }
        public function getAttribute3(){
            return $this->attribute3;
        }
    }
    

    Now, you are able to get attribute value like below:

    $test=new Test();
    echo $test->attribute;
    

    To find more about php's magic methods take a look at the php's official document:

    Magic Methods

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)
编辑
预览

报告相同问题?