Доступ к измененному свойству родительского класса

Сразу извиняюсь за возможно тупой вопрос, только начинаю изучать ооп.

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

→ Ссылка