首页 > 解决方案 > PHP:如何访问覆盖的公共变量

问题描述

PHP 访问父类变量——这个问题是关于在子类中访问父类变量:

我的问题是关于在子类中访问被覆盖的父类变量

我正在尝试访问一个被覆盖的公共变量,但它没有打印任何东西。

我正在使用它访问它

echo parent::$var;    

其中 var 是父类中的公共变量

error_reporting(-1);
class ParentClass{
    public $var='shiva';
/*  public static $var2 = 'arun';
    public function memythod(){
        echo 'mymethod';
    }

    public static function ourmethod(){
        echo 'ourmethod';
    }*/
}


class ChildClass extends ParentClass{
    public $var = 'shiva1';
    public function __construct(){
        echo $this->var;
        echo "<br>";
        echo parent::$var;
    }

    public function displaymethod(){
        echo $this->var;
        echo parent::$var;
    }


}


$obj = new ChildClass();
$obj->displaymethod();
//$obj->displayvar();

标签: php

解决方案


我认为问题在于您无法从父级访问 $var 是我的观点。一旦你继承/扩展它,子类就是父类——这是被称为“Liskov Substitution”(SOLID)的面向对象原则的一部分,你可以将子类与父类互换使用。在这种情况下,ChildClass 的 $var 和 ParentClass 的 $var 是同一个引用。我不认为父母在扩展后有单独的参考。

例如,假设您有一个基础 CAR 类和一个扩展 TRUCK 类。如果您在每个类中都有一个 $type,那么您真的不希望在 TRUCK 中使用 CAR 的 $type —— 整个想法是有一个不同的。如果要访问原始父变量,请为原始值设置 getter 或公共方法,或者在 ChildClass/TRUCK 类上使用不同的变量名称。

对于您的情况,因为 ChildClass 扩展了 ParentClass,所以 ParentClass 的任何部分都应该是 ChildClass 中 THIS 上下文的一部分。

您可以像这样在 displayMethod()中访问$var :

$this->var

StackOverflow 参考:PHP 继承

笔记

在评论和社区讨论之后,我编辑了这个答案,使其更加完整。谢谢@Ed Cottrel!


推荐阅读