То, что я пытаюсь сделать, - это создать модель предметной области с помощью простого старого объекта 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 для создания класса Proxy для Project с именем Project_Proxy, но иногда встречаются подклассы Project, поэтому я ищу решение, используя Reflection API, если есть способ.
У меня есть поиск в Google, но я не нашел способа изменить поведение метода
Редактировать: или было бы неплохо использовать метод eval Outlet PHP для создания прокси-классов для моих моделей и всех их подклассов?