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