Прямо сейчас у меня есть BaseObject, который выполняет ORM для DB. Я полагаюсь на частные $data и магический сеттер и геттер для создания объекта с кучей столбцов в качестве члена частного объекта (динамически). В дочернем классе, если я хочу изменить поведение, чтобы установить отдельный член объекта, я должен переопределить родительский установщик и найти ключ. Мой вопрос в том, есть ли лучший способ сделать это, когда я мог бы просто переопределить один элемент объекта, а не пройти через __setter
Base Object Mapper, который сопоставляется с БД и динамически создает кучу частных параметров
class Base
{
private $data = array();
public function __construct(){
//get columns info from db and do set
}
public function __set($key, $value){
$this->data[$key] = $value;
}
public function __get($key){
return isset($this->data[$key])? $this->data[$key] : null;
}
}
и дочерний класс. Прямо сейчас, чтобы переопределить настройку параметра, я должен сделать это
class Child extends Base
{
public function __set($name, $value){
if($name == 'dog' && $value == 'chihuahua')
$this->dog = 'dog bark wolf wolf';
else if($name == 'cat' && $value == 'sand')
$this->cat = 'cat say meow meow';
...
}
}
мой вопрос, есть ли элегантный способ сделать это, возможно, что-то подобное в дочернем классе?
public function __set_dog($value)
$this->dog = 'dog bark wolf wolf';
public function __set_cat($value)
$this->cat = 'cat say meow meow';
цель состоит в том, чтобы сделать
$animal1 = new Animal();
$anmial1->dog = 'pit bull';
$anmial1->cat= 'sand';
$animal2 = new Animal();
$anmial1->dog = 'chihuahua';
$anmial1->cat= 'house cat';
if()
используется=
, когда вы, скорее всего, имеете в виду==
. - person nickb   schedule 23.10.2012