PHP:如何使用相同的名称访问子类中超类的数据成员?

时间:2015-04-30 09:01:06

标签: php inheritance

我到处搜索,但没有找到任何解决方案。  以下是我的代码,我想访问子类中超类的$myvar,但我不知道怎么做?当我使用$this关键字时,它访问同一个类中的变量,但不访问超类中的变量。请任何帮助将不胜感激。

<?php 


class First{
    protected $myvar = "First Class";
}


class Second extends First{

    public $myvar = "Second Class";

    function __construct(){
        echo $this -> myvar;// here I want to access the $myvar of super class
    }

} 

$obj = new Second();

 ?>

注意:我可以使用super关键字在java中实现相同的功能。

4 个答案:

答案 0 :(得分:2)

正如Rizier所说,你尝试这样做的方式是行不通的。也许静态属性对你有用(取决于你的需求)

<?php
class a {
    protected static $var = 'a';
}

class b extends a {
    protected static $var = 'b';

    public function __construct() {
        echo self::$var;
        echo parent::$var;

    }
}

$b = new b();

您还可以在a中重建b。您可以利用方法和其他属性的继承,同时能够使用a - 构造函数中的默认值。

<?php
class a {
    protected  $var = 'a';
}

class b extends a {
    protected  $var = 'b';

    public function __construct() {
        echo $this->var;

        $a = new a();
        echo $a->var;

    }
}

$b = new b();

我认为你应该回答的主要问题是为什么你希望一个类从另一个继承,但仍希望能够改变/修改父类中的东西。这对整个继承设计来说有点适得其反。

答案 1 :(得分:2)

您可以创建一个自定义函数,从父类返回变量但请记住,变量应该是&#34;私有&#34;:

class First{
    private $myvar = "First Class";
    protected function get_variable($var_name)
    {
        return $this->{$var_name};
    }
}
class Second extends First{
    public $myvar = "Second Class";
    function __construct() {
        echo parent::get_variable('myvar');
    }

}
$obj = new Second();

答案 2 :(得分:1)

在创建从父类继承的子类时,您不能被覆盖。所以你必须改变它的名称。

答案 3 :(得分:1)

您使用以下方式覆盖父参数: public $ myvar =“Second Class”; 删除此行以使用父类的继承或更改子类参数的名称。