Ülekatstud meetodi kutsumine OOP-s PHP-s
Ülekirjutamisel kaotab lapsklass
juurdepääsu ülekatstud meetodile
vanemas. Siiski on sellele võimalik
juurde pääseda. Seda tehakse
kasutades võtmesõna parent,
mis viitab vanemaklassile.
Vaatame näidet, mil võib olla vajalik juurdepääs vanema meetodile. Olgu meil järgmine vanemaklass:
<?php
class User {
private $name;
public function setName($name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
}
?>
Oletame, et me laste klassis kirjutasime vanema meetodi üle:
<?php
class Student extends User {
public function setName($name) {
if (strlen($name) > 0) {
$this->name = $name;
} else {
echo 'õpilase nime viga';
}
}
}
?>
Võib märgata, et ülekatstud meetodis teostatakse tingimuse korral tegelikult vanema meetodi kood. Tekib mittevajalik koodi dubleerimine.
Sellest saab lahti, kui kutsuda vanema meetodit. Teeme selle:
<?php
class Student extends User {
public function setName($name) {
if (strlen($name) > 0) {
parent::setName($name); // vanema meetod
} else {
echo 'õpilase nime viga';
}
}
}
?>
Antud on järgmine kood:
<?php
class User {
private $age;
public function setAge($age) {
if ($age >= 0) {
$this->age = $age;
} else {
echo 'vaja vanust üle 0';
}
}
}
class Employee extends User {
public function setAge($age) {
if ($age <= 120) {
if ($age >= 0) {
$this->age = $age;
} else {
echo 'vaja vanust üle 0';
}
} else {
echo 'vaja vanust alla 120';
}
}
}
?>
Klassis Employee parandage
ja lihtsustage vanuse setterit, kasutades
vanema originaalset meetodit.