我想要做的是用一个普通的旧 PHP 对象创建一个域模型。我正在创建一个库,它将完成所有基础设施的工作。所以我的一个模型看起来像这样
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();
}
Outlet PHP 使用 eval 为 Project 创建一个名为 Project_Proxy 的代理类,但有时会有 Project 的子类,所以如果有办法,我正在使用反射 API 寻找解决方案。
我有搜索谷歌,但还没有找到改变方法行为
编辑:还是使用 Outlet PHP 的 eval 方法为我的模型及其所有子类创建代理类是个好主意?