到目前为止,当我想知道用户是否已登录时,我使用了Yii::app()->user->isGuest
。
但是,有一个名为getIsGuest()
的方法,它返回isGuest
变量。
if (!Yii::app()->user->getIsGuest())
我的问题是,我应该使用getIsGuest()
吗?使用getIsGuest()
是正确的方法吗?或者它没关系,它们都是正确的方法吗?
答案 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的官方文档:
答案 1 :(得分:1)
这并不重要。如果您致电user->isGuest
,则会在内部调用方法user->getIsGuest()
。它只是一种别名。