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 Mon, Aug 27, 2012 at 4:26 PM, Stuart Dallas <stuart@xxxxxxxx> wrote:
> 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/

That sounds sane and i probably go for that :)
Thanks for clarifying it a little.

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