我到处搜索,但没有找到任何解决方案。
以下是我的代码,我想访问子类中超类的$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中实现相同的功能。
答案 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”; 删除此行以使用父类的继承或更改子类参数的名称。