Re: What's the best way to make a dynamic plugin architecture?

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

 



On 27 Aug 2012, at 14:52, Mark <markg85@xxxxxxxxx> wrote:

> On Mon, Aug 27, 2012 at 3:46 PM, Stuart Dallas <stuart@xxxxxxxx> wrote:
>> On 27 Aug 2012, at 14:29, Mark <markg85@xxxxxxxxx> wrote:
>> 
>>> On Mon, Aug 27, 2012 at 12:41 PM, Stuart Dallas <stuart@xxxxxxxx> wrote:
>>>> On 26 Aug 2012, at 19:42, Mark <markg85@xxxxxxxxx> wrote:
>>>> 
>>>>> 2. Let the plugin itself (so in this case PluginOne.php) open itself
>>>>> and register it to the PluginLoader.
>>>>> 
>>>>> With the first option i have to do eval which i try to avoid if possible.
>>>>> With the second solution the PluginLoader probably has to be a singlethon.
>>>> 
>>>> Why does it need to be a singleton?
>>> 
>>> Well, i would then do something like this from within the included
>>> plugin file after the class:
>>> PluginLoader::getInstance()->registerPlugin(new PluginOne());
>>> 
>>> Or something alike.
>> 
>> I'm not sure I see what PluginLoader is doing? It makes more sense to me if you register like so:
>> 
>> PluginLoader::getInstance()->registerPlugin('PluginOne');
>> 
>> Then you get an instance of the plugin:
>> 
>> $plugin = PluginLoader::getInstance()->factory('PluginOne');
>> 
>> Tho, even then I don't see what the PluginLoader is adding to the party.
> 
> Well, i'm making the classes up as i type. I don't actually have a
> PluginLoader yet. Or rather, i'm just beginning to make it right now.
> What it's doing is very simple. Read through the directory of the
> plugins and load every single plugin it finds in memory. Then every
> plugin registers the mime types it can handle. That information is
> stored in the PluginLoader upon which some other place can call:
> PluginLoader::pluginForMime("text/html"). Though i still have to take
> a good look at that.
> 
> But you're right, i can use the factory pattern here.


Ahh, I see. Personally I'd go with the following (pseudocode)...

Inside the PluginLoader constructor (or other method)
  foreach (plugindir)
    require plugindir/plugindir.php
    $plugindir::init($this)

The static init() method calls PluginLoader::registerPlugin('mime/type', 'PluginClassName'). Then pluginForMime does a lookup for the mime type and returns an object of the corresponding type. That way a single plugin can support multiple mime types.

-Stuart

-- 
Stuart Dallas
3ft9 Ltd
http://3ft9.com/

-- 
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