On Mon, Aug 27, 2012 at 4:26 PM, Stuart Dallas <stu...@3ft9.com> wrote:
> On 27 Aug 2012, at 14:52, Mark <mark...@gmail.com> wrote:
>> On Mon, Aug 27, 2012 at 3:46 PM, Stuart Dallas <stu...@3ft9.com> wrote:
>>> On 27 Aug 2012, at 14:29, Mark <mark...@gmail.com> wrote:
>>>> On Mon, Aug 27, 2012 at 12:41 PM, Stuart Dallas <stu...@3ft9.com> wrote:
>>>>> On 26 Aug 2012, at 19:42, Mark <mark...@gmail.com> 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

Reply via email to