On 22/11/2007, Marco Kaiser <[EMAIL PROTECTED]> wrote: > Hi again, > > to explain the main idea a bit more, the code below work and moves the > main getInstance function from the class and its possible to abstract > this. > it would be cool to get the protected property also into the abstract > class. Any idea or maybe a solution in the near future? > > <?php > abstract class singleton > { > static public function getInstance() > { > $caller = get_called_class(); > if (!static::$_instance instanceof $caller) { > static::$_instance = new $caller; > } > > return static::$_instance; > } > } > > class foo extends singleton { > static protected $_instance = null; > } > > class bar extends singleton { > static protected $_instance = null; > } > > var_dump(foo::getInstance()); > var_dump(bar::getInstance()); > var_dump(foo::getInstance()); > var_dump(bar::getInstance()); > ?> > > On Nov 22, 2007 9:29 PM, Marco Kaiser <[EMAIL PROTECTED]> wrote: > > Hi List, > > > > just to drop my note here, i asked (i think) 2 years ago for such a > > feature to automate my singleton pattern. Not with late static > > bindings this is possible. > > > > <?php > > class singleton > > { > > static protected $_instance = null; > > > > static public function getInstance() > > { > > $caller = get_called_class(); > > if (!static::$_instance instanceof $caller) { > > static::$_instance = new $caller; > > } > > > > return static::$_instance; > > } > > } > > > > class foo extends singleton > > { > > } > > > > var_dump(foo::getInstance()); > > var_dump(foo::getInstance()); > > ?> > > > > i think this will also drop much redundant code from some frameworks. :) > > So this is one of my examples that helps much. > > > > > > -- > > Marco Kaiser > > > > > > -- > Marco Kaiser
<?php abstract class singleton { static protected $_instance = null; static public function getInstance() { $caller = get_called_class(); if (!static::$_instance instanceof $caller) { static::$_instance = new $caller; } return static::$_instance; } } class foo extends singleton { } class bar extends singleton { } var_dump(foo::getInstance()); var_dump(bar::getInstance()); var_dump(foo::getInstance()); var_dump(bar::getInstance()); ?> returns ... object(foo)#1 (0) { } object(bar)#2 (0) { } object(foo)#1 (0) { } object(bar)#2 (0) { } in PHP 5.3.0-dev (cli) (built: Nov 20 2007 08:19:12) I think this is great! Well done everyone. Unless I've completely missed the point. -- ----- Richard Quadling Zend Certified Engineer : http://zend.com/zce.php?c=ZEND002498&r=213474731 "Standing on the shoulders of some very clever giants!" -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php