Llamar a un método sobrescrito en POO en PHP
Al sobrescribir, la clase hija pierde
acceso al método sobrescrito
de la clase padre. Sin embargo, es posible
acceder a él de todas formas. Esto se hace
usando la palabra clave parent,
que hace referencia a la clase
padre.
Veamos un ejemplo en el que podríamos necesitar acceso al método de la clase padre. Supongamos que tenemos la siguiente clase padre:
<?php
class User {
private $name;
public function setName($name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
}
?>
Supongamos que en la clase hija sobrescribimos el método del padre:
<?php
class Student extends User {
public function setName($name) {
if (strlen($name) > 0) {
$this->name = $name;
} else {
echo 'student name error';
}
}
}
?>
Se puede notar que en el método sobrescrito, al cumplirse la condición, se ejecuta el código del método de la clase padre. Resulta una duplicación de código innecesaria.
Podemos eliminarla si llamamos al método del padre. Hagámoslo:
<?php
class Student extends User {
public function setName($name) {
if (strlen($name) > 0) {
parent::setName($name); // método del padre
} else {
echo 'student name error';
}
}
}
?>
Tenemos el siguiente código:
<?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';
}
}
}
?>
En la clase Employee, corrija
simplifique el setter de la edad, utilizando
el método original del padre.