Доступ к измененному свойству родительского класса
Сразу извиняюсь за возможно тупой вопрос, только начинаю изучать ооп.
class A {
protected $age = 5;
public function get() {
$this->age = 10;
$b = new B();
}
}
class B extends A {
public function __construct() {
echo $this->age;
}
}
$a = new A();
$a->get();
В методе get() класса A мы изменили свойство $age на 10, однако при вызове данное изменение игнорируется. При чем если использую статические свойства, все получается
Ответы (1 шт):
В главной программе создается объект класса А
для этого объекта по умолчанию установлено значение age равным 5.
Далее в главной программе вызывается метод get класса А.
В методе get сначала присваивается новое значение в переменную age равное 10.
(это значение далее НЕ используется).
Далее в методе get создается новый экземпляр класса В.
По умолчанию для нового экземпляра, так как он является наследником от класса А, инициализируется переменная age равным 5.
В конструкторе класса В вызывается вывод echo текущего значения age. Выводится значение, установленное для экземпляра класса В равное 5.
Если Вы хотите увидеть 10, то нужно либо в конструкторе класса В присвоить нужное значение в переменную age до вызова echo, либо вызывать echo в методе get класса А после присвоения нужного значения.
Думаю, правильный код может выглядеть так:
class A {
protected $age = 5;
public function get() {
echo $this->age;
}
}
class B extends A {
public function __construct() {
$this->age = 10;
}
}
$a = new A();
$a->get();
$b = new B();
$b->get();
На выходе будет 5 10