【问题标题】:PHP: How to access overriden public variablePHP:如何访问覆盖公共变量
【发布时间】:2018-11-27 22:07:29
【问题描述】:

PHP Accessing Parent Class Variable -- 这个问题是关于在子类中访问父类变量的:

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

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

我正在使用

访问它
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();

【问题讨论】:

  • 你不能那样做。被覆盖意味着被覆盖。剩下的就是$this-&gt;var
  • 如果你使用类属性而不是实例属性,你可以为所欲为。
  • 当然,有一些方法可以保存数据,例如在设置$this-&gt;var之前将父值保存在某处(例如$this-&gt;parent_var)。
  • @vivek modi 用于访问子类中的父类变量的问题。但这个问题是关于访问被覆盖的变量

标签: php


【解决方案1】:

我认为问题在于您无法从父级访问 $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 Reference: PHP Inheritance

注意

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

【讨论】:

    猜你喜欢
    • 2014-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-22
    相关资源
    最近更新 更多