Overstyring af forældremetoder i OOP i PHP
En underklasse kan overstyre en forældremetode ved at oprette en metode med det samme navn. Lad os se et eksempel. Antag, at vi har følgende forældreklasse:
<?php
class User {
private $name;
public function setName($name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
}
?>
Lad os i underklassen oprette en metode med samme navn:
<?php
class Student extends User {
public function setName($name) {
}
}
?>
Som regel er overstyring af forældremetoder nødvendig for at ændre eller supplere denne metodes adfærd. Lad os i vores tilfælde tilføje en kontrol af navnets længde:
<?php
class Student extends User {
public function setName($name) {
if (strlen($name) > 0) {
$this->name = $name;
} else {
echo 'student name error';
}
}
}
?>
Lad os sikre os, at det er den overstyrede metode, der kaldes. Lad os først oprette et objekt af underklassen:
<?php
$student = new Student;
?>
Lad os nu kalde vores metode og give den en korrekt værdi:
<?php
$student->setName('john');
?>
Lad os nu kalde metoden og give den en ukorrekt værdi. Som et resultat vil vi se den udløste undtagelse:
<?php
$student->setName(''); // fejl
?>
I klassen User skal du lave
en getter og setter for alder.
I klassen Employee skal du overstyre
alder-sætteren og lave en
kontrol i den for, at alderen er fra
18 til 65 år.