0

我有以下代码,我希望返回“WORKED”,但什么也不返回。

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();

因为我$barFoo类定义,并且,扩展AnotherBarFoo,我希望得到已经定义的变量Foo

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

谢谢!

4

1 回答 1

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这将是一个更清洁的解决方案。

于 2012-06-09T01:27:44.360 回答