我一直在PHP中使用OOP已经有一段时间了,但由于某种原因,我的脑部完全崩溃了,无法弄清楚这里出了什么问题!
我有一个更复杂的类,但写了一个更简单的类来测试它,甚至这不起作用......
谁能告诉我我做错了什么?
class test
{
public $testvar;
function __construct()
{
$this->testvar = 1;
}
}
class test2 extends test
{
function __construct()
{
echo $this->testvar;
}
}
$test = new test;
$test2 = new test2;
我要做的就是将一个变量从父类传递给子类!我发誓过去我刚刚使用 $ this-> varName 在扩展程序中获取 $ varName ?
谢谢!
答案 0 :(得分:15)
您必须从子类的构造函数中调用父类的构造函数。
在您的情况下,这意味着您的test2
课程将成为:
class test2 extends test
{
function __construct()
{
parent::__construct();
echo $this->testvar;
}
}
有关更多信息,您可以查看手册的页面Constructors and Destructors,其中说明了您的问题:
注意:父构造函数不是 如果子类隐式调用 定义构造函数。为了运行 父构造函数,调用
parent::__construct()
内的$this->varName
子构造函数是必需的。
您可以使用class test {
public $testvar = 2;
function __construct() {
$this->testvar = 1;
}
}
class test2 extends test {
function __construct() {
var_dump($this->testvar);
}
}
$test2 = new test2;
:这不是问题;考虑这段代码:
int 2
输出结果为:
$testvar
{{1}}的“默认”值。
这意味着问题不在于您无法访问该属性:此处的问题仅在于未调用父类的构造函数。
答案 1 :(得分:2)
您的test2
课程应致电
parent::__construct()
在其构造函数中。