Наследование и синглетон

Рейтинг: 1Ответов: 1Опубликовано: 20.11.2014

Есть singleton и созданы два класса A и B наследующие от класса core.

Вопрос в следующем:

  1. Класса А дочерний от родительского класса core,
  2. Класс B дочерний от родительского класса A,

Почему же getInstance() для дочернего класса B не получает значение переменной a ?

class core{

    public $a;

    public static function getInstance() {
        static $instance = null;

        if(is_null($instance)) {
            $instance = new static();
        }

        return $instance;
    }

    protected final function __construct() { $this->a = 1; }
    protected final function __clone() {}
    protected final function __wakeup() {}

}

class A extends core{}

class B extends A{}

$a      = A::getInstance();
$a_new  = A::getInstance();
$b      = B::getInstance();

var_dump($a);        //1
var_dump($a_new);    //1
var_dump($b);        //1

$a->a = 2;
var_dump($a->a);       //2
var_dump($a_new->a);   //2
var_dump($b->a);       //1   ??

Ответы

▲ 1Принят

Потому что

$a === $a_new //так как получены из класса A, следовательно и свойство $a будет одно на двоих

и

$a !== $b //так как получены из разных классов (A и B), следовательно и свойство $a будет для каждого свое