PHP从父构造函数中构造的子类中获取父类变量

时间:2014-10-21 08:53:51

标签: php oop inheritance

使用以下代码段,为什么$this->foo会在B子类构造函数中返回NULL?根据我的阅读,我认为子类继承了它的所有父变量和方法

$a = new A();

class A {
    protected $foo;

    public function __construct() {
        $this->foo = "Hello World";

        $b = new B();
    }
}

class B extends A {
    public function __construct() {
        var_dump($this->foo);
    }
}

this question的所选答案似乎表明$this->foo应该可以访问。

是因为B是在其父类中构造的吗?如果是这种情况,我如何访问子类中的变量?

1 个答案:

答案 0 :(得分:2)

您正在执行new A(),然后单独执行new B()。您有两个完全独立的对象实例。一个实例化在A的构造函数中发生并不重要,这完全无关紧要。 B扩展A并不重要。您有两个独立的对象,并且对象实例不会隐式共享数据,这正是您所期望的。

由于B的构造函数会覆盖其父构造函数,因此它也不会执行A的任何代码,因此在实例化新的B时基本上什么都不会发生。