类层次结构

时间:2012-06-09 01:25:28

标签: php scope

我有以下代码,我希望返回“工作”,但不返回任何内容。

class Foo {
    public function __construct() {
        echo('Foo::__construct()<br />');
    }

    public function start() {
        echo('Foo::start()<br />');

        $this->bar = new Bar();
        $this->anotherBar = new AnotherBar();
    }
}

class Bar extends Foo {
    public function test() {
        echo('Bar::test()<br />');

        return 'WORKED';
    }
}

class AnotherBar extends Foo {
    public function __construct() {
        echo('AnotherBar::__construct()<br />');

        echo($this->bar->test());
    }
}

$foo = new Foo();
$foo->start();

路由器

Foo::__construct() <- From $foo = new Foo();
Foo::start() <- From Foo::__construct();
Foo::__construct() <- From $this->bar = new Bar();
AnotherBar::__construct() <- From $this->anotherBar = new AnotherBar();

因为我从$bar类定义了Foo,并且将AnotherBar扩展为Foo,所以我希望从Foo获取已定义的变量。

我看不出有什么问题。我从哪里开始?

谢谢!

1 个答案:

答案 0 :(得分:3)

AnotherBar实例从未调用过start方法,因此其$this->bar未定义。

显示错误时,您会收到以下消息:

Notice: Undefined property: AnotherBar::$bar in - on line 20  
Fatal error: Call to a member function test() on a non-object in - on line 20

您可以在<?php行之后立即包含以下代码,以查看所有错误:

ini_set('display_errors', 'on');
error_reporting(E_ALL);

当然,你也可以通过php.ini来做到这一点,这将是一个更清洁的解决方案。