私がやろうとしているのは、Plain Old PHP Object を使用してドメイン モデルを作成することです。すべてのインフラストラクチャを実行するライブラリを作成しています。だから私のモデルの1つはこのように見えます
class Project {
public $id;
public $name;
public $typeId;
private $type;
public function getType() {
return $this->type;
}
public function setType(Type $type) {
$this->typeId = $type->id;
$this->type = $type;
}
}
新しいプロジェクトを作成setType
し、有効な Type オブジェクトで呼び出し、ORM を使用してプロジェクト インスタンスを保存すると、プロジェクトとタイプの両方が保存されます。しかし、その後、プロジェクトをロードし、getType
メソッドを使用して、ORM がこのメソッドを透過的に変更して、永続性からオブジェクトをロードするようにします。したがって、この方法は次のとおりです。
public function getType() {
return $this->type;
}
透過的に次のように変更されます。
public function getType() {
if (is_null($this->type) {
$this->type = $this->adapter->findById('table', $this->typeId);
}
return $this->type; // or return parent::getType();
}
アウトレット PHP は eval を使用して Project_Proxy という Project の Proxy クラスを作成しますが、Project のサブクラスが存在する場合があるため、方法があれば Reflection API を使用して解決策を探しています。
Googleで検索しましたが、メソッドの動作を変更する方法が見つかりませんでした
編集:または、Outlet PHP の eval メソッドを使用して、モデルとそのすべてのサブクラスのプロキシ クラスを作成することをお勧めしますか?