使用以下代码片段,为什么$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->foo
应该是可访问的。
是因为B是从其父类内部构造的吗?如果是这种情况,我如何访问子类中的变量?
您正在执行new A()
,然后分别执行new B()
。您有两个完全独立的对象实例。在A
的构造函数中发生一个实例化并不重要,这完全无关。B
对A
的扩展也不重要。您有两个独立的对象,并且对象实例不会隐式共享数据,这似乎是您所期望的。
由于B
的构造函数覆盖了其父级的构造函数,因此它也不会执行A
的任何代码,因此在实例化新的B
时基本上不会发生任何事情。