Chiamare un metodo sovrascritto in OOP in PHP
Durante la sovrascrittura, la classe figlia perde
l'accesso al metodo sovrascritto
della classe genitore. Tuttavia, è comunque possibile
accedervi. Questo viene fatto
utilizzando la parola chiave parent,
che fa riferimento alla classe
genitore.
Vediamo un esempio in cui potremmo aver bisogno dell'accesso al metodo della classe genitore. Supponiamo di avere la seguente classe genitore:
<?php
class User {
private $name;
public function setName($name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
}
?>
Supponiamo che nella classe figlia abbiamo sovrascritto il metodo della classe genitore:
<?php
class Student extends User {
public function setName($name) {
if (strlen($name) > 0) {
$this->name = $name;
} else {
echo 'student name error';
}
}
}
?>
Si può notare che nel metodo sovrascritto, quando la condizione è soddisfatta, viene essenzialmente eseguito il codice del metodo della classe genitore. Risulta in una duplicazione non necessaria del codice.
Possiamo eliminarla chiamando il metodo della classe genitore. Facciamolo:
<?php
class Student extends User {
public function setName($name) {
if (strlen($name) > 0) {
parent::setName($name); // metodo della classe genitore
} else {
echo 'student name error';
}
}
}
?>
È dato il seguente codice:
<?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';
}
}
}
?>
Nella classe Employee correggi
semplifica il setter dell'età, utilizzando
il metodo originale della classe genitore.