Re: How to implement a plugin system?

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

 



""Nathan Nobbe"" <quickshiftin@xxxxxxxxx> wrote in message 
news:7dd2dc0b0708061904i5578f8ewbe7ca511669f1dd5@xxxxxxxxxxxxxxxxx
> On 8/6/07, Stut <stuttle@xxxxxxxxx> wrote:
>>
>> Hamza Saglam wrote:
>> > Thanks for your response. However I am looking for something a bit more
>> > comprehensive :)
>> >
>> > I could do it as you suggested if I had only a few plugins. As I am
>> going to
>> > add loads of plugins over the time, rather than adding all the plugins
>> one
>> > by one, could something like a 'loader' class be implemented? What I
>> mean by
>> > that is, it will take the requested plugin names (with their own
>> parameters
>> > necessary) and load/initialise them.
>> >
>> > In semi-psuedo-code, it would be something like:
>> >
>> >  foreach plugin suplied as the argument
>> >    include the plugin
>> >    initialise it
>> >  end
>> >
>> > Perhaps I should change the question to: "Do you think something like
>> this
>> > would be efficient and useable? If not what sort of pattern would you
>> > follow?"
>>
>> What you're describing is the Factory pattern, and yes that's the most
>> efficient way to implement plugins. You should never load classes unless
>> you need them - it's a complete waste of time, and definitely not
>> recommended if you're going to have a lot of plugins.
>>
>> I would suggest you name your plugins X_plugin, Y_plugin and Z_plugin
>> (where plugin could be anything) because that adds a level of security.
>> Otherwise you could open yourself up to security issues because the user
>> could instantiate any class in your system.
>>
>> -Stut
>>
>> --
>> http://stut.net/
>>
>> > "Borokov Smith" <borokov@xxxxxxxxx> wrote in message
>> > news:46B77B4B.9020600@xxxxxxxxxxxx
>> >> Hey Hamza,
>> >>
>> >> require_once($chosenPlugin . '.class.php');
>> >>
>> >> $obj = new $chosenPlugin();
>> >> return $obj;
>> >>
>> >> And you can start from there.
>> >>
>> >> hth,
>> >>
>> >> boro
>> >>
>> >>
>> >>
>> >> Hamza Saglam schreef:
>> >>> Hello all,
>> >>>
>> >>> I am working on a project which needs to have some sort of plugins
>> >>> architecture and I am kinda stuck. Basically I want to give a list of
>> >>> items to the user, and according to his/her selection, I want to load
>> >>> relevant functionality into my application.
>> >>>
>> >>>
>> >>> I was thinking of having an abstract plugin class, and have the
>> >>> plugins implement that but then how would I actually load the 
>> >>> plugins?
>> >>> Say for instance I want to load plugins X,Y,Z (and lets say i
>> >>> implemented them as [X|Y|Z].class.php) , should I just 'include' (or
>> >>> require) them? Or should I initialize all possible plugins and just
>> >>> pick the ones user has chosen (which sounds a bit pointless as it
>> >>> would load unnecessary stuff)?
>> >>>
>> >>>
>> >>> How would you go about doing something like this?
>> >>>
>> >>>
>> >>> Thanks.
>> >>>
>> >>>
>> >
>>
>> --
>> PHP General Mailing List (http://www.php.net/)
>> To unsubscribe, visit: http://www.php.net/unsub.php
>>
>>
> allow me to elaborate.  you want to aim for composition as a flexible
> alternative to sub-classing to extend behavior.
> Namely what you want is the Strategy pattern.  Strategy allows you to
> compose objects at run time dynamically, thereby changing
> behavior in your system on-the-fly.  The components are made similar by a
> common interface, which can be either the PHP
> *interface* or the PHP *abstract class*.
>
> these components each encapsulate a different algorithm or module as you
> would call it.  and the interface makes the system simple
> to extend.  to create a new module you simply implement the interface and 
> it
> is interchangeable with the other modules in the system.
> the factory method pattern is sort of complex.  it is used to encapsulate
> object creation.  it is typically used to instantiate objects in a 
> *family*
> *of products* which is defined by a common interface, ie the strategy
> pattern.  the factory method is used to create products in a standard way.
> factory method pattern goes further, in typical implementations, by using
> template method in a parent class.   this controls the boundaries
> of the modules in the system.
>
> the template method invokes the a factory method on a subclass  to get a
> concrete object.  it then operates on the the concrete object in a
> predefined sequence.  the abstract base class can define different types 
> of
> methods. the base class may specify methods that must be
> implemented by concrete subclasses.  it can also expose hook methods, with 
> a
> default implementation.  these methods can be optionally
> implemented in the subclasses.
> after invoking the factory method to get a concrete object the factorys
> template method will invoke the remaining methods, mandatory, hook
> or otherwise on the newly created concrete object in a predefined sequence
> before handing the new object to the client code that called it.
>
> http://www.phppatterns.com/docs/design/strategy_pattern
> http://www.phppatterns.com/docs/design/the_factory_method
>
> -nathan
>

Hi Nathan,

That all sounds quite interesting. I'll try to apply it when I'm coding my 
prototype :)


Thanks a lot,
Hamza. 

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[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