如何将抽象变量静态化为子类

时间:2016-07-28 13:51:04

标签: php class inheritance

<?php
abstract class A {
    public static $var = "A";
    public function setVar() {

    }
    public function test() {
        $this->setVar();
        echo static::$var;
    }

    public function returnVar() {
        return static::$var;
    }
}

class B extends A {
    public function setVar() {
        static::$var = 'B';
    }
}

class C extends A {
    public function setVar() {
        static::$var = 'C';
    }
}

$class = new B();
$class->test();

$class2 = new C();
$class2->test();

echo "</br>";
echo $class->returnVar();
echo $class2->returnVar();

?>

我试图做的是将变量$ var static赋予扩展抽象类A的类,而不必在其他地方重新声明它。

所以说也许我从B类创建多个扩展A的对象,我希望B类生成的所有对象共享相同的$ var值。

假设我然后根据类C创建对象,它们应该共享$ var ...

的相同值

这是我目前得到的结果:

BC
CC

然而,我正在寻找的是:

BC
BC

由于

1 个答案:

答案 0 :(得分:2)

尝试这样:

  #setting
  public function setVar() {
    static::$var[get_class($this)] = 'B';
  }
  #getting in abstract 
   public function returnVar() {
      return static::$var[get_class($this)];
  }
  #add this in the abstract class 
  public function setVar();