Axe*_*eem 4 php oop magic-methods
我不确定在PHP 中使用__get和__set方法有什么价值.
这是在数组中设置值的代码.
class myclass {
public $sotre = array();
public function __set($arraykey,$value){
echo 'Setting '.$arraykey.' to '.$value;
$this->store[$arraykey] = $value;
}
}
$obj = new myclass;
$obj->a = 'arfan';
Run Code Online (Sandbox Code Playgroud)
这是另一个代码.
class myclass {
public $sotre = array();
public function setvalue($arraykey,$value){
echo 'Setting '.$arraykey.' to '.$value;
$this->store[$arraykey] = $value;
}
}
$obj = new myclass;
$obj->setvalue('a','arfan');
Run Code Online (Sandbox Code Playgroud)
这两个函数都做同样的事情.
代码使用__get/ __setmagic方法:
class myclass {
public $store =
array(
'a'=>'arfan',
'b'=>'azeem',
'c'=>'hader'
);
public function __get($arraykey){
echo 'Getting array key '.$arraykey.'<br />';
if(array_key_exists($arraykey,$this->store)){
return $this->store[$arraykey];
}
}
public function getvalue($arraykey){
echo 'Getting array key '.$arraykey.'<br />';
if(array_key_exists($arraykey,$this->store)){
return $this->store[$arraykey];
}
}
}
$obj = new myclass;
echo $obj->a;
$obj = new myclass;
echo $obj->getvalue('a');
Run Code Online (Sandbox Code Playgroud)
如你所见,这两个功能都做同样的工作.
我很困惑为什么PHP开发人员会使用魔术方法__get/ __set何时可以自己实现?
我确信它们有一些用处,但我必须遗漏一些东西.
Rob*_*ert 12
这不是关于他们做什么,而是关于什么时候被调用.
__set() is run when writing data to inaccessible properties.
__get() is utilized for reading data from inaccessible properties.
Run Code Online (Sandbox Code Playgroud)
所以,如果你想
echo $object->propertDoesnExists; //it will call get
Run Code Online (Sandbox Code Playgroud)
但是这个
$object->propertDoesnExists = 1; //it will call set
Run Code Online (Sandbox Code Playgroud)
使用get的很好的例子,并设置方法是这里
使用MagicMethods可以使代码更容易阅读和更短.
有更多有趣的MagicMethods
我也注意到你使用$storePUBLIC的数组!没有任何意义.如果您将其标记为公开,则无需使用方法即可访问.这不是重点.当您使用方法或魔术方法来获取/设置变量时,因为方法可以在您想要分配或获取变量时提供更好的控制,您可以进行一些验证,检查错误等.将变量设置为公共被称为非常糟糕的约定.公共成员可以在项目的每个地方访问类外,如果发生错误,需要检查很多代码,当方法访问的私有成员出现问题时,可能只有2种方法需要检查(获取/设置).