PHP genişletme sınıf çocuklar aynı statik özelliğini miras yapar

0 Cevap php

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;
    }
}

0 Cevap