Pozivanje redefinisanih metoda u OOP u PHP-u
Prilikom redefinisanja, potomak gubi
pristup redefinisanoj metodi
roditelja. Međutim, i dalje mu je moguće
pristupiti. Ovo se radi
pomoću ključne reči parent,
koja ukazuje na roditeljsku
klasu.
Pogledajmo primer kada nam može zatrebati pristup metodu roditelja. Neka imamo sledeću klasu-roditelj:
<?php
class User {
private $name;
public function setName($name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
}
?>
Neka smo u klasi-potomku redefinisali metodu roditelja:
<?php
class Student extends User {
public function setName($name) {
if (strlen($name) > 0) {
$this->name = $name;
} else {
echo 'Greška u imenu studenta';
}
}
}
?>
Može se primetiti da u redefinisanoj metodi, prilikom ispunjenja uslova, faktički izvršava kod roditeljske metode. Ispada da imamo nepotrebno dupliranje koda.
Može se od njega osloboditi ako se pozove metod roditelja. Učinimo to:
<?php
class Student extends User {
public function setName($name) {
if (strlen($name) > 0) {
parent::setName($name); // metoda roditelja
} else {
echo 'Greška u imenu studenta';
}
}
}
?>
Dat je sledeći kod:
<?php
class User {
private $age;
public function setAge($age) {
if ($age >= 0) {
$this->age = $age;
} else {
echo 'Potrebna starost veća od 0';
}
}
}
class Employee extends User {
public function setAge($age) {
if ($age <= 120) {
if ($age >= 0) {
$this->age = $age;
} else {
echo 'Potrebna starost veća od 0';
}
} else {
echo 'Potrebna starost manja od 120';
}
}
}
?>
U klasi Employee ispravite
pojednostavite setter za starost, koristeći
originalni metod roditelja.