2016-07-28 45 views
0
<?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静态到扩展抽象类A的类而不必重新声明它在哪里。如何使一个抽象变量静态到一个子类

所以说,也许我创建从延伸到B类的多个对象,我想从B级制作共享相同的$ VAR值的所有对象。

且说我基于C类创建对象,他们都应该共享$ VAR值相同...

这是目前我得到的结果是:

BC 
CC 

然而,我正在寻找的是:

BC 
BC 

感谢

回答

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(); 
+0

完美的作品,谢谢。 :) – Addil