現在、ORM から DB への BaseObject があります。プライベート $data と魔法のセッターとゲッターに依存して、列の束を持つオブジェクトをプライベート オブジェクト メンバーとして (動的に) 作成します。子クラス内で、個々のオブジェクト メンバーを設定するように動作を変更したい場合は、親セッターをオーバーライドしてキーを探す必要があります。私の質問は、__setter を経由するのではなく、単一のオブジェクト メンバーをオーバーライドできる、これを行うためのより良い方法があるかどうかです。
データベースにマップし、一連のプライベート パラメータを動的に作成するベース オブジェクト マッパー
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';