PHP在子类中重写后通过扩展类访问父类变量

PHP在子类中重写后通过扩展类访问父类变量,php,oop,inheritance,overriding,Php,Oop,Inheritance,Overriding,如果扩展后子类重写了原始父类变量,我们如何通过子类访问该变量 我确信它与$this伪变量有关,因为我正在构造ExtendClass,在该上下文中,$this只能访问重写的$var变量 所以我尝试通过类方法静态访问变量 class SimpleClass{ public static $var = 'This is Parent'; public function getVar(){ return self::$var; } } class Extend

如果扩展后子类重写了原始父类变量,我们如何通过子类访问该变量

我确信它与$this伪变量有关,因为我正在构造ExtendClass,在该上下文中,$this只能访问重写的$var变量

所以我尝试通过类方法静态访问变量

class SimpleClass{
    public static $var = 'This is Parent';

    public function getVar(){
       return self::$var;
    }
}

class ExtendClass extends SimpleClass{
    public static $var = 'This is Child';

    public function getParentVar(){
        return parent::getVar();
    }

    public function getChildVar(){
        return self::$var;
    }
}

$obj = new ExtendClass();

echo $obj->getParentVar();// Prints 'This is Parent'

echo $obj->getChildVar();// Print 'This is Child'

它起作用了,但是我们如何通过父类的getVar()方法非静态地访问父类变量。

除非子类在编辑它之前显式地备份原始值,否则您无法访问类成员的父类值,因为没有父类值。子类和父类的代码共享同一个变量。

您可以使用
ReflectionClass
检索它的默认值,但这完全是另一个问题。@MichaelBerkowski嗯,我没有仔细阅读这个问题。在这种情况下,答案是类head中声明的显式默认值反射。为什么不准备一个例子?…我从OP那里得到了澄清,如果确实需要,我会发布一个答案。我不明白为什么两个类都需要相同的变量名。简单保留一个。如果您需要两个变量,请使用两个变量名。这是您要访问的默认值吗?我想,否则就没有意义了,因为在对象上下文中,不会有与子实例不同的父实例。
class SimpleClass{
    public static $var = 'This is Parent';

    public function getVar(){
       return self::$var;
    }
}

class ExtendClass extends SimpleClass{
    public static $var = 'This is Child';

    public function getParentVar(){
        return parent::getVar();
    }

    public function getChildVar(){
        return self::$var;
    }
}

$obj = new ExtendClass();

echo $obj->getParentVar();// Prints 'This is Parent'

echo $obj->getChildVar();// Print 'This is Child'