PHP中的类继承问题

时间:2011-07-23 10:44:21

标签: php class inheritance properties extends

你好stackOverflow系列:),

我有一个问题,我在其他地方找到了答案。我试着解释一下我的问题: 我有一个类,如果我从它创建一个其他类,从该子类我无法访问父类的属性。 我做错事情了? 我试图将我的类变量复制到本地并尝试返回本地变量,但是不能使用以下3种方式。

这是我的例子。 首先,我简单地创建一个对象:

$test = new test();

我的两节课如下:

class test {

    public $testvar;

    public function __construct() {
        $this->testvar = 1234568;
        echo ":) ".$this->testvar();
        $test2 = new test2();
}

    public function testvar() {
        echo "testvar() called > ";
        return $this->testvar;
    }
}

并且测试2:

class test2 extends test  {

    public function __construct() {
        echo "<br>:| this-> ".$this->testvar;
        echo "<br>:| parent:: ". parent::testvar();
        echo "<br>:| "; $this->testvar();
    }

}

愿有人有个主意吗? THX

2 个答案:

答案 0 :(得分:6)

你误解了继承概念。在test2的构造函数中实例化test不是继承。

未调用test的构造函数,因此未设置testvar。从$test2 = new test2();的构造函数中删除test。尝试:

class test {

    public $testvar;

    public function __construct() {
        $this->testvar = 1234568;
        echo ":) ".$this->testvar();
}

    public function testvar() {
        echo "testvar() called > ";
        return $this->testvar;
    }
}

class test2 extends test  {

    public function __construct() {
        parent::__construct();
        echo "<br>:| this-> ".$this->testvar;
        echo "<br>:| "; $this->testvar();
    }

}

$test2 = new test2();

另请参阅PHP manual on constructors(以及classes)。

答案 1 :(得分:0)

我想,如果你在test的构造函数中实例化test2,那并不意味着,测试2在你创建的上下文中实例化,这意味着:你设置的变量不可用于test2 :) ......我绝对不应该成为techear :-D

test2应该看起来像:

class test2 extends test  {

public function __construct() {
    parent::__construct();
    echo "<br>:| this-> ".$this->testvar;
    echo "<br>:| parent:: ". parent::testvar();
    echo "<br>:| "; $this->testvar();
  }
}

和test-constructor:

public function __construct() {
    $this->testvar = 1234568;
    echo ":) ".$this->testvar();
}

然后在这些类之外调用新的test2()!