将变量传递给扩展的PHP类

Mat*_*att 4 php oop

我已经在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.

这意味着问题不在于您无法访问该属性:此处的问题仅在于未调用父类的构造函数.