Felülírt metódus hívása OOP-ban PHP-ben
A felülírás során a gyermekosztály elveszíti
a hozzáférést a felülírt szülői metódushoz.
Azonban továbbra is elérhetővé tehető.
Ezt a parent kulcsszóval tehetjük meg,
ami a szülőosztályra mutat.
Nézzünk egy példát, amikor szükségünk lehet a szülői metódus elérésére. Tegyük fel, hogy a következő szülőosztályunk van:
<?php
class User {
private $name;
public function setName($name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
}
?>
Tegyük fel, hogy a gyermekosztályban felülírtuk a szülő metódusát:
<?php
class Student extends User {
public function setName($name) {
if (strlen($name) > 0) {
$this->name = $name;
} else {
echo 'student name error';
}
}
}
?>
Megfigyelhető, hogy a felülírt metódusban a feltétel teljesülésekor gyakorlatilag a szülői metódus kódja fut le. Ez szükségtelen kódismétléshez vezet.
Ettől megszabadulhatunk, ha meghívjuk a szülő metódusát. Tegyük ezt meg:
<?php
class Student extends User {
public function setName($name) {
if (strlen($name) > 0) {
parent::setName($name); // szülői metódus
} else {
echo 'student name error';
}
}
}
?>
Adott a következő kód:
<?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';
}
}
}
?>
A Employee osztályban javítsa
az életkor setter metódusát, használva
a szülő eredeti metódusát.