Is it possible to modify methods of an object instance using reflection
domain-model, orm, php, reflection
Solution
There is no builtin way of doing this. And although you can do that using the PECL extension called runkit, I would strongly recommend finding another solution. Changing the implementation of functions you can't know anything about is very dangerous and might lead to bugs where debugging a single such bug can take longer than writing the `if (is_null(...` statements for all your functions.
BTW: don't use `is_null()`, since you might fetch null values from the database over and over again. You should store the fetched values in a separate variable.
Problem
What I'm trying to do is create a domain model with a Plain Old PHP Object. The I'm creating a library which will do all the infrastructure stuff. So one of my models looks like this ``` 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; } } ``` Now if create a new Project and call `setType` with a valid Type object and save the project instance using the ORM both the project and type is saved. But then I load the Project and use `getType` method I want the ORM to have modified this method transparently to load the object from persitence. So this method here: ``` public function getType() { return $this->type; } ``` to be transparently changed into: ``` 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 uses eval to create a Proxy class for Project called Project_Proxy but sometimes there will be subclasses of Project so I am searching for a solution by using Reflection API if there is a way. I have search google but haven't found anyway to change a method behaviour Edit: or would it be a good idea to use Outlet PHP's eval method to create Proxy Classes for my models and all subclasses of them?