我已经在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;
Run Code Online (Sandbox Code Playgroud)
我要做的就是将一个变量从父类传递给子类!我发誓过去我刚用$ this-> varName来获取扩展名中的$ varName?
谢谢!
Pas*_*TIN 15
您必须从子类的构造函数中调用父类的构造函数.
在您的情况下,这意味着您的test2班级将成为:
class test2 extends test
{
function __construct()
{
parent::__construct();
echo $this->testvar;
}
}
Run Code Online (Sandbox Code Playgroud)
有关更多信息,您可以查看手册的页面构造函数和析构函数,其中说明了您的问题:
注意: 如果子类定义构造函数,则不会隐式调用父构造函数.为了运行父构造函数,需要
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;
Run Code Online (Sandbox Code Playgroud)
输出是:
int 2
Run Code Online (Sandbox Code Playgroud)
哪个是"默认"值$testvar.
这意味着问题不在于您无法访问该属性:此处的问题仅在于未调用父类的构造函数.