php dynamic class inheritance

1.4k views Asked by At

I know I can generate a class at runtime by executing

$obj = (object)array('foo' => 'bar');+

this way I can use

echo $obj->foo; //bar

What if want to make $obj inherits from an existing class?

What I wanna achive: I'm forking paris project on github (https://github.com/balanza/paris). It's an active record class. I wonder I need to declare a class for every object, even if it's empty:

class User extends Model{}

I guess I might use dynamic object to avoid this boring stuff.

4

There are 4 answers

0
shadowhand On

You could always do eval('class User extends Model{}') but is not a good idea. Really, you should just create the class in a file, then opcode caching will work properly, it can be version tracked, etc etc.

tl;dr: Define the model class, it is the Right Thing To Do™.

0
mhitza On

Strictly to your question, the only way I can see it possible is by using Runkit, which let's you re-declare classes on the fly. Not sure how portable that solution is.

0
Ilya Kolesnikov On

You can use a Prototype design pattern to clone an object, then you can add everything you need in cloned one

0
Komrod On

If there is really no other way for you to do it, you can create a "dynamic" inheritance with my Dynherit class. It creates the inheritance you want but from files and only with classes you didnt already loaded.

Download v0.62 : http://optimisationphp.komrod.com/source/sha/test/dynamic_inheritance_01/dynherit_v0.62.zip

GitHub link : https://github.com/Komrod/Dynherit