BiggieStylin Evil Genius. Love it/Hate it.

30Nov/090

SiTech_Plugins

Well, I'm finally doing it. I'm rewriting my voodoo code that makes reloadable modules or plugins in PHP. I've always toyed with the idea of rewriting my original work for PHP_Modules and making it work with classes; now the time has come. I have started work with my SiTech library to make SiTech_Plugins. It will be the same concept of PHP_Modules, but not only will it work with functions, it will now work with classes. This is something that was never really possible before because when PHP_Modules was written, it was written for PHP 4.

I haven't gotten very far yet with code, but the theory of it is to create a base class with a __call() method. That's basically all the base class will consist of. When a plugin is loaded, the class read from the plugin file will be created to extend this base class. From there, all methods found within the class will be stored as lambda functions inside a special class variable. This then makes it easy to reload code, by recreating the lambda function when the code is reloaded. Therefore, the class itself never needs to be redefined, it just needs all the functions reloaded. So, in theory this is entirely possible with PHP 5 and the use of the magic __call() method for classes.

Some of you may wonder why I don't use runkit from PECL. While it would make things a ton easier, I wanted more of a code solution that might work for everyone without extra requirements. I might look into creating it to work both ways though. I can imagine runkit would be a lot cleaner method of doing such voodoo, but I'm also unsure if runkit will even compile with 5.3.  I'll have to do some research into that and find out for sure. Of course, there will be more to come as I make progress even if its good or bad progress.