Ben bir test case göstererek başlamak istiyorum:
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!
Notes
- Ben bir fabrika + yukarıdaki tekiz kalıplarını kullanıyorum. Evet, biraz.
- Ben "doğru desen uygulanması" ile ilgili herhangi bir gözlük gerekmez. Ben ;) ihlalleri KISS değil, problem çözme gerekir.
- Eleştirmenler A bir arabirim olmalıdır diyebilirsiniz. İdeal olarak, o ne olmalıydı, ama üzgünüm, sadece basit bir sınıf bulunuyor.
Bu konular self::$instance
, tüm örnekler için aynıdır gerçeğinde yatmaktadır. Nasıl her sınıf için self::$instance
ayrı mı?
Edit: Ben bu fikri yaşadım:
$GLOBALS['store']=array();
class A {
public static $instance=null;
public function __construct(){
$GLOBALS['store'][__CLASS__]=$this;
}
}