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