воскресенье, 26 декабря 2010 г.

Иерархия Singleton классов.

Доброго утра. Вот мой пример экспериментирования с  понятием Singleton in PHP. Задача была - сократить код. Проблема.  Я создал класс Singleton и начал от него унаследовать. Получилось то что все разные классы которые хотят иметь разные экземпляры синглетов имеют  один и тот же $instance. Не в зависимости от иерархии все классы имеют одинаковый  $instance. Будьте с этим осторожны.
<?php
class Singleton{
    static private $instance = NULL;
    public $str="nole";
    static function getInstance(){
        if (self::$instance == NULL){
              self::$instance = new Singleton();
        }
        return self::$instance;
      }
   
      function __construct(){
    }
   
   
   
    function __clone(){
    }
}//s5_dobject_singleton

class Singleton1_0 extends Singleton{
}

class Singleton1_1 extends Singleton{
}

class Singleton1_2 extends Singleton{
}

$s_lev0_0=Singleton::getInstance();
$s_lev0_0->str='lev0_0';
$s_lev0_1=Singleton::getInstance();
$s_lev0_1->str='lev0_1';
$s_lev0_2=Singleton::getInstance();
$s_lev0_2->str='lev0_2';
//
$s_lev1_0=Singleton1_0::getInstance();
$s_lev1_0->str='lev1_0';
$s_lev1_1=Singleton1_1::getInstance();
$s_lev1_1->str='lev1_1';
$s_lev1_2=Singleton1_2::getInstance();
$s_lev1_2->str='lev1_2';
//
print 'lev0_0='.$s_lev0_0->str.'<br>';
print 'lev0_1='.$s_lev0_1->str.'<br>';
print 'lev0_2='.$s_lev0_2->str.'<br>';
//
print 'lev1_0='.$s_lev0_0->str.'<br>';
print 'lev1_1='.$s_lev1_1->str.'<br>';
print 'lev1_2='.$s_lev1_2->str.'<br>';
?>
Результат...


lev0_0=lev1_2
lev0_1=lev1_2
lev0_2=lev1_2
lev1_0=lev1_2
lev1_1=lev1_2
lev1_2=lev1_2

Вывод:
Не в зависимости от иерархии все классы имеют одинаковый  $instance. Будьте с этим осторожны.

Комментариев нет:

Отправить комментарий