Ylikirjoitetun metodin kutsuminen OOP:ssa PHP:ssä
Ylikirjoitettaessa jälkeläinen menettää
pääsyn ylikirjoitettuun metodiin
vanhemmassa. Kuitenkin siihen pääsy
on edelleen mahdollista. Tämä tehdään
käyttämällä avainsanaa parent,
joka viittaa vanhemman luokkaan.
Katsotaanpa esimerkkiä, jolloin saatamme tarvita pääsyä vanhemman metodiin. Oletetaan, että meillä on seuraava vanhemman luokka:
<?php
class User {
private $name;
public function setName($name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
}
?>
Oletetaan, että jälkeläisluokassa ylikirjoitimme vanhemman metodin:
<?php
class Student extends User {
public function setName($name) {
if (strlen($name) > 0) {
$this->name = $name;
} else {
echo 'student name error';
}
}
}
?>
Voidaan huomata, että ylikirjoitetussa metodissa ehdon täyttyessä käytännössä suoritetaan vanhemman metodin koodi. Tuloksena on tarpeeton koodin kaksoiskappale.
Siitä voi päästä eroon, jos kutsutaan vanhemman metodia. Tehdäänpä niin:
<?php
class Student extends User {
public function setName($name) {
if (strlen($name) > 0) {
parent::setName($name); // vanhemman metodi
} else {
echo 'student name error';
}
}
}
?>
Annettuna on seuraava koodi:
<?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';
}
}
}
?>
Luokassa Employee korjatkaa
(yksinkertaistaka) ikäsetteri käyttämällä
vanhemman alkuperäistä metodia.