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

Reply via email to