Конструктор при наследяване в ООП в PHP

При наследяване е възможно да се предефинира конструкторът на родителя. Нека разгледаме един пример. Да предположим, че имаме следния родителски клас:

php<?php
  class User {
    private $name;
    private $surn;
    
    public function __construct($name, $surn) {
      $this->name = $name;
      $this->surn = $surn;
    }
    
    public function getName() {
      return $this->name;
    }
    public function getSurn() {
      return $this->surn;
    }
  }
?>

Да предположим, че от родителския клас наследява следният клас:

php<?php
  class Student extends User {
    
  }
?>

Да предположим, че в класа-наследник искаме да разширим конструктора, като добавим допълнителни параметри към него:

php<?php
  class Student extends User {
    private $year;
    
    public function __construct($name, $surn, $year) {
      
    }
  }
?>

В този случай е задължително първият ред да извика конструктора на родителя чрез parent::__construct():

php<?php
  class Student extends User {
    private $year;
    
    public function __construct($name, $surn, $year) {
      parent::__construct($name, $surn);
    }
  }
?>

Командата parent::__construct() по същество е конструкторът на родителя. Следователно нека му подадем необходимите параметри:

php<?php
  class Student extends User {
    private $year;
    
    public function __construct($name, $surn, $year) {
      parent::__construct($name, $surn);
    }
  }
?>

Сега в наследника годината на обучение ще я запишем в собственото свойство на наследника:

php<?php
  class Student extends User {
    private $year;
    
    public function __construct($name, $surn, $year) {
      parent::__construct($name, $surn);
      $this->year = $year;
    }
  }
?>

Нека направим гетър за годината на обучение:

php<?php
  class Student extends User {
    private $year;
    
    public function __construct($name, $surn, $year) {
      parent::__construct($name, $surn);
      $this->year = $year;
    }
    
    public function getYear() {
      return $this->year;
    }
  }
?>
Задание 1

Да предположим, че класът Employee наследява от класа User от този урок.

Задание 2

Предефинирайте в класа Employee конструктора на родителя, като добавите към него параметър за възраст и заплата.

Задание 3

Направете гетъри за възрастта и заплатата.