Re: Flexible application plugin architecture, is this possible?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Monday 03 January 2011,

Mike <ipso@xxxxxxxxxxxxx> wrote:

> I'm trying to design a powerful plugin system that doesn't require any

> (or extremely little) modification to my existing large code base. Hook

> based systems unfortunately don't seem to meet this requirement.

OK, that is a design problem...

>

> Is something like this possible in PHP?

>

> //Magic function I made up, similar to __call(),

> //only it replaces "new $class" with its own return value.

> function __instantiate( $class, $args ) {

> $plugin_class = $class.'Plugin';

>

> if ( file_exists( 'plugins/'.$plugin_class.'.php' ) {

> $obj = new $plugin_class($args);

> return $obj;

> } else {

> return new $class($args);

> }

> }

>

> class MainClass {

> function doSomething( $args ) {

> echo "MainClass doSomething() called...\n";

> }

> }

>

> class MainClassPlugin extends MainClass {

> function doSomething( $args ) {

> echo "MainClassPlugin doSomething() called...\n";

>

> //Modify arguments if necessary

> echo "MainClassPlugin modifying arguments...\n";

>

> $retval = parent::doSomething( $args );

>

> //Modify function output, or anything else required

> echo "MainClassPlugin post filter...\n";

>

> return $retval;

> }

> }

>

> $main_class = new MainClass();

> $main_class->doSomething( 'foo' );

>

> Results:

> MainClassPlugin doSomething() called...

> MainClassPlugin modifying arguments...

> MainClass doSomething() called...

> MainClassPlugin post filter...

>

> I realize PHP doesn't have this magical "__instantiate" function, but

> does it have any similar mechanism that would work to automatically

> load alternate classes, or have a class dynamically overload

> itself during runtime?

Well, you can do this using abstract classes and interfaces. Also

you must try the autoloader:

http://php.net/manual/en/language.oop5.autoload.php

Probably this will help you a lot.

Best regards,

--

Daniel Molina Wegener <dmw [at] coder [dot] cl>

System Programmer & Web Developer

Phone: +56 (2) 979-0277 | Blog: http://coder.cl/

Attachment: signature.asc
Description: This is a digitally signed message part.


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux