将变量传递给扩展的PHP类

时间:2009-09-19 21:14:29

标签: 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;

我要做的就是将一个变量从父类传递给子类!我发誓过去我刚刚使用 $ this-> varName 在扩展程序中获取 $ varName

谢谢!

2 个答案:

答案 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()

在其构造函数中。