Would делать это можно считать хорошей практикой ...PHP Магические методы __set и __get
У меня есть класс A со следующими определениями:
class A{
private $_varOne;
private $_varTwo;
private $_varThree;
public $varOne;
public function __get($name){
$fn_name = 'get' . $name;
if (method_exists($this, $fn_name)){
return $this->$fn_name();
}else if(property_exists('DB', $name)){
return $this->$name;
}else{
return null;
}
}
public function __set($name, $value){
$fn_name = 'set' . $name;
if(method_exists($this, $fn_name)){
$this->$fn_name($value);
}else if(property_exists($this->__get("Classname"), $name)){
$this->$name = $value;
}else{
return null;
}
}
public function get_varOne(){
return $this->_varOne . "+";
}
}
$A = new A();
$A->_varOne; //For some reason I need _varOne to be returned appended with a +
$A->_varTwo; //I just need the value of _varTwo
Для того, чтобы не создавать 4 набора и 4 методов получения , Я использовал магические методы, чтобы либо вызвать уважаемого геттера для свойства, которое мне нужно, либо просто вернуть значение свойства без каких-либо изменений. Может ли это считаться хорошей практикой?
+0 - в то время как я согласен, что это замечательно изящно, это возможно только в том случае, если вы не верите в использование ключевых слов видимости и декларации переднего класса (я знаю, что вы не делаете). Для всех остальных это пример, почему вы не следует использовать магические методы для этой цели, потому что '$ a-> rand' будет намного медленнее, чем просто вызвать' get_rand' напрямую – Gordon