Κατασκευαστής στην κληρονομικότητα στην ΑΟΠ στην 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;
    }
  }
?>

Ας φτιάξουμε μια μέθοδο λήψης (getter) για το έτος φοίτησης:

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

Φτιάξτε μεθόδους λήψης (getters) για την ηλικία και τον μισθό.