Κλήση υπερκαλυμμένης μεθόδου στην ΑΑΠ στην PHP
Κατά την υπερκάλυψη, ο απόγονος χάνει
την πρόσβαση στην υπερκαλυμμένη μέθοδο
του γονέα. Ωστόσο, είναι ακόμα δυνατόν
να αποκτήσει πρόσβαση σε αυτήν. Αυτό γίνεται
χρησιμοποιώντας τη λέξη-κλειδί parent,
που δείχνει towards the parent
class.
Ας δούμε ένα παράδειγμα όπου μπορεί να χρειαστεί πρόσβαση στη μέθοδο του γονέα. Ας υποθέσουμε ότι έχουμε την ακόλουθη κλάση-γονέα:
<?php
class User {
private $name;
public function setName($name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
}
?>
Ας υποθέσουμε ότι στην κλάση-απόγονο υπερκαλύψαμε τη μέθοδο του γονέα:
<?php
class Student extends User {
public function setName($name) {
if (strlen($name) > 0) {
$this->name = $name;
} else {
echo 'student name error';
}
}
}
?>
Μπορεί να παρατηρηθεί ότι στην υπερκαλυμμένη μέθοδο, όταν ικανοποιείται η συνθήκη, πρακτικά εκτελείται ο κώδικας της μεθόδου του γονέα. Αποτελεί λοιπόν επαναλαμβανόμενο κώδικα.
Μπορούμε να τον αφαιρέσουμε, εάν καλέσουμε τη μέθοδο του γονέα. Ας το κάνουμε:
<?php
class Student extends User {
public function setName($name) {
if (strlen($name) > 0) {
parent::setName($name); // μέθοδος γονέα
} else {
echo 'student name error';
}
}
}
?>
Δίνεται ο ακόλουθος κώδικας:
<?php
class User {
private $age;
public function setAge($age) {
if ($age >= 0) {
$this->age = $age;
} else {
echo 'need age more 0';
}
}
}
class Employee extends User {
public function setAge($age) {
if ($age <= 120) {
if ($age >= 0) {
$this->age = $age;
} else {
echo 'need age more 0';
}
} else {
echo 'need age less 120';
}
}
}
?>
Στην κλάση Employee διορθώστε
απλοποιήστε τον setter ηλικίας, χρησιμοποιώντας
την αρχική μέθοδο του γονέα.