Yii:使用getIsGuest()或isGuest

时间:2014-09-11 13:31:46

标签: php authentication methods yii

到目前为止,当我想知道用户是否已登录时,我使用了Yii::app()->user->isGuest

但是,有一个名为getIsGuest()的方法,它返回isGuest变量。

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

我的问题是,我应该使用getIsGuest()吗?使用getIsGuest()是正确的方法吗?或者它没关系,它们都是正确的方法吗?

2 个答案:

答案 0 :(得分:4)

实际上,$class->getAttribute()$class->attribute之间没有区别。但是,知道背后发生了什么是很好的。

Yii广泛使用php魔术方法。在这种情况下,它使用__set和__get魔术方法来实现getter和setter。由于php的官方文档定义了__get()

  

__ get()用于从不可访问的属性中读取数据。

考虑一个例子:

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;
    }
}

如果您想获取attribute属性值,则必须调用getAttribute()方法,但无法获得attribute,如下所示(因为您无法访问attribute属性):

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

但是使用__get魔术方法,它可以实现为:

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;
    }
}

现在,您可以获得如下所示的attribute值:

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

要了解有关php的魔术方法的更多信息,请查看php的官方文档:

Magic Methods

答案 1 :(得分:1)

这并不重要。如果您致电user->isGuest,则会在内部调用方法user->getIsGuest()。它只是一种别名。