С помощью следующего фрагмента кода, почему $this->foo
вернуть NULL
в конструкторе дочернего класса B? Из того, что я прочитал, у меня сложилось впечатление, что дочерний класс наследует все свои родительские переменные и методы.
$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
,
Других решений пока нет …