Singleton не работает в 5.2.1

440hz

php.ru
Singleton не работает в 5.2.1

в 5.2.2 выдает 1
в 5.2.1 выдает 0

это так и надо или я накосячил?
PHP:
<?

class Singleton {

	private static $instance = array();

	private function __clone() {
		return false;
	}

	public static function GetInstance($class) {

		if (!isset(self::$instance[$class]))
			self::$instance[$class] = new $class;
		
		return self::$instance[$class];
   
   }

}

class foo extends Singleton {
	
	private $a = 0;

	public function Set() {
		$this->a = 1;
	}

	public function Get() {
		return $this->a;
	}

	public static function GetInstance() {

		$class = parent::GetInstance(__CLASS__);
		return $class;

	}
}

$a = foo::GetInstance();
$a->Set();

$b = foo::GetInstance();

print $b->Get();

?>
 

tony2001

TeaM PHPClub
"1" + strict notice во всех версиях начиная с 5.0.3 (более старых у меня нет).
 

master_x

Pitavale XXI wieku
440hz
А мне вообще непонятно как ты можешь наследовать от синглтона. Твой GetInstance в foo объявлен как статик, ты не сможешь получить имя класса "foo" внутри этого метода, __CLASS__ всегда будет равен Singleton.
 

440hz

php.ru
Автор оригинала: master_x
440hz
А мне вообще непонятно как ты можешь наследовать от синглтона. Твой GetInstance в foo объявлен как статик, ты не сможешь получить имя класса "foo" внутри этого метода, __CLASS__ всегда будет равен Singleton.
ну тут-то просто...

$class = parent::GetInstance(__CLASS__);

проблема в том что 0 выдает на хостинге.
 

itprog

Cruftsman
А с ним будет работать если расставить ссылки:
PHP:
class Singleton {

    private static $instance = array();

    private function __clone() {
        return false;
    }

    public static function &GetInstance($class) {

        if (!isset(self::$instance[$class]))
            self::$instance[$class] = new $class;
        
        return self::$instance[$class];
   
   }

}

class foo extends Singleton {
    
    private $a = 0;

    public function Set() {
        $this->a = 1;
    }

    public function Get() {
        return $this->a;
    }

    public static function &GetInstance() {

        $class = &parent::GetInstance(__CLASS__);
        return $class;

    }
}

$a = &foo::GetInstance();
$a->Set();

$b = &foo::GetInstance();

print $b->Get();
 

440hz

php.ru
Автор оригинала: itprog
А с ним будет работать если расставить ссылки:
а это лишнее...
там и так ссылка отдается

хотя я и так пробовал и сяк... даже через параметр передавал (&$instance) - нет
вот как флаг убрал - все зашуршало

---

еще раз проверил - только с убраным флагом пашет.
=(
 

tony2001

TeaM PHPClub
>ГДЕ РЫТЬ?
в первую очередь в таких случаях отключать Optimizer и ему подобные экстеншены и убирать всякие сторонние патчи.
 

440hz

php.ru
Автор оригинала: tony2001
>ГДЕ РЫТЬ?
в первую очередь в таких случаях отключать Optimizer и ему подобные экстеншены и убирать всякие сторонние патчи.
спасибо. на будущее обязательно учту.
 
Сверху