如何在父类中设置对象并在子类中使用它?

时间:2011-05-14 00:33:48

标签: php oop inheritance

这是一些有效的代码:

class A {
    public $Foo;

    public function GetFoo() {
        $this->Foo = 'Bar';
    }
}

class B extends A {
    function __construct() {
        $this->GetFoo();
        echo $this->Foo;
    }
}

$b = new B(); // Outputs "Bar"

有什么方法可以让这个“更漂亮”(即没有A :: GetFoo()方法)?我会认为将$ this-> Foo的填充包含在A :: __ construct()中会起作用,但事实并非如此。

只是为了把它包起来,这就是我想要的:类A实例化我的DB对象,并且该对象可用于A的每个子类。

2 个答案:

答案 0 :(得分:2)

也许你在没有从B打电话的情况下覆盖了父母的构造函数?

class A {

    protected $Foo = null;

    public function __construct() {
        $this->Foo = 'Bar';
    }

}

class B extends A {

    public function __construct() {
        parent::__construct();
        echo $this->Foo;
    }

}

答案 1 :(得分:1)

来自PHP manual

  

“必须将类属性定义为   公共,私人或受保护的。如果   声明使用var而没有显式   可见性关键字,属性将   被定义为为公共。“

因此,您的班级B可以看到$this->Foo。您不必先调用GetFoo()。但是,如果需要在类$this->Foo的构造函数内引用B,则必须首先调用父构造函数。