RE: Singleton with variable parameters

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

 



> -----Original Message-----
> From: Nathan Nobbe [mailto:quickshiftin@xxxxxxxxx]
> Sent: Wednesday, December 15, 2010 1:31 PM
> To: Sebastian Detert
> Cc: php-general@xxxxxxxxxxxxx
> Subject: Re:  Singleton with variable parameters
> 
> On Wed, Dec 15, 2010 at 2:11 PM, Sebastian Detert <php-
> maillist@xxxxxxxxx>wrote:
> 
> > Hi guys,
> >
> > I am trying to generate an abstract Singleton class for use in
> > arbitrary classes, like
> >
> > class Foo extends Singleton {}
> >
> > and generate a new class with Foo -> getInstance();
> >
> 
> Until traits release I think you'll find this painful as any class that extends
> Singleton must now have extra functionality imbued via interfaces and
> composition.
> 
> You will probly prefer to use a registry, something like
> Registry::getInstance('classname', array('parameters'));
> 
> Even if you go with an abstract base class you will want an array of instances
> internally.
> 
> How can I manage to use this with an unkown number of parameters like
> Foo ->
> > getInstance('a', 'b'); ?
> >
> 
> yes, func_get_args() & call_user_func_array() however, fyi, these are very
> slow.
> 
> 
> > Something like "self::$instance = call_user_func (array(static ,
> > "__construct"), func_get_args());" instead of "self::$instance = new self;"
> > doesn't work and an eval() is too slow.
> >
> 
> if performance is a concern why not use setters to establish state on all of
> your classes and keep the getInstance method down to 0 params.  As long as
> your singletons aren't immutable this should work just fine.
> 
> -nathan

Sebastian,

If you need to have some way to keep track of all the instances of subclasses and be able to communicate between them, then you'll have need to have the self::$instances = array() in the base class, as Nathan mentioned.  But implementing instance map in the base abstract is unnecessary, IMO, as it could get very messy in the long run.  I suggest you look into Interfaces.  It will help make your code easier to manage in the future as your app gets more sophisticated.

Regards,
Tommy


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