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