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