Κατασκευαστής στην κληρονομικότητα στην ΑΟΠ στην 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
class Student extends User {
}
?>
Ας υποθέσουμε ότι θέλουμε στην κλάση-απόγονου να επεκτείνουμε τον κατασκευαστή, προσθέτοντας σε αυτόν επιπλέον παραμέτρους:
<?php
class Student extends User {
private $year;
public function __construct($name, $surn, $year) {
}
}
?>
Σε αυτήν την περίπτωση πρέπει αναγκαστικά
να καλέσουμε στην πρώτη γραμμή τον κατασκευαστή
του γονέα μέσω parent::__construct():
<?php
class Student extends User {
private $year;
public function __construct($name, $surn, $year) {
parent::__construct($name, $surn);
}
}
?>
Η εντολή parent::__construct() στην ουσία είναι
ο κατασκευαστής του γονέα. Επομένως
θα περάσουμε σε αυτόν τις απαιτούμενες παραμέτρους:
<?php
class Student extends User {
private $year;
public function __construct($name, $surn, $year) {
parent::__construct($name, $surn);
}
}
?>
Τώρα στον απόγονο το έτος φοίτησης θα το γράψουμε στην δικιά του ιδιότητα του απογόνου:
<?php
class Student extends User {
private $year;
public function __construct($name, $surn, $year) {
parent::__construct($name, $surn);
$this->year = $year;
}
}
?>
Ας φτιάξουμε μια μέθοδο λήψης (getter) για το έτος φοίτησης:
<?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;
}
}
?>
Ας υποθέσουμε ότι η κλάση Employee κληρονομεί
από την κλάση User από αυτό
το μάθημα.
Αντικαταστήστε στην κλάση Employee
τον κατασκευαστή του γονέα, προσθέτοντας σε αυτόν
παράμετρο με την ηλικία και τον μισθό.
Φτιάξτε μεθόδους λήψης (getters) για την ηλικία και τον μισθό.