Re: Reusable Singleton pattern using PHP5

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

 



Simas Toleikis wrote:
php6 will include static late binding


Great. Love the other new features, especially namespaces.

not sure namespaces will make it ... I believe the decision on that
is still out.



- until then you have 2 choices,
create a hack (see below) or stick redundant code into each class you
want to be a singleton.


The hack doesn't work (See below). Guess we are left with copy-paste

my bad - I was thinking out loud and didn't check. here is a less elegant
hack that does get some of the way to where you want to be (take
a look at what happens if you set Singleton::__construct() as private -
you get a weird error, which to me smell like a bug - but then again there
is some logic to it, although I wonder if it's intended)
:

<?php
class Test extends Singleton
{
    static public function getInstance()
    {
        return self::_getInstance(__CLASS__);
    }
}

abstract class Singleton
{
    private   static $instance;

    protected function __construct() {}
    private function __clone() {}

    abstract static public function getInstance();

    protected static function _getInstance($c)
    {
        if (!isset(self::$instance)) {
            self::$instance = new $c;
        }
        return self::$instance;
    }
}

var_dump( Test::getInstance() );
?>

thing :-/ Though i wonder if there are any other hacks using some sort
of classkit/other class manipulation functions?

probably runkit (or is it classkit - can't remember which of those
is more actively developed) might give a way out - but I would recommend
it for production code.



   public static function GetInstance()
   {
       if (!isset(self::$instance)) {
               if (!isset(self::$class)) {


Isn't that self::$class the same "late static binding" thing? :-) As i

yeah - put it down to a thinko.

get it, at this point from Singleton::GetInstance() you can't get the
static $class member of Test class.

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