Я хотел бы начать с показа контрольного примера:
class A {
public static $instance=null;
public function __construct(){
self::$instance=$this;
}
public function className(){
return get_class(self::$instance);
}
}
class B extends A {
public function className(){
return get_class(self::$instance);
}
}
// test code
$b=new B();
echo $b->className; // B
$a=new A();
echo $a->className; // A
echo $b->className; // A <- error: not B any more!
Примечания
- Я использую заводские + одиночные шаблоны выше,Ну, в некоторой степени.
- Мне не нужны какие-либо спецификации на "правильную реализацию шаблонов".Мне нужно решение проблем, а не нарушения KISS;).
- Критики могут сказать, что А должен быть интерфейсом.В идеале, так и должно быть, но это просто простой класс, извините.
Проблема заключается в том, что self::$instance
одинаково для всех экземпляров.Как мне выделить self::$instance
для каждого класса?
Редактировать: У меня была такая идея:
$GLOBALS['store']=array();
class A {
public static $instance=null;
public function __construct(){
$GLOBALS['store'][__CLASS__]=$this;
}
}