Chamando um método sobrescrito em POO em PHP
Ao sobrescrever um método, a classe filha perde
acesso ao método sobrescrito
da classe pai. No entanto, ainda é possível
acessá-lo. Isso é feito
usando a palavra-chave parent,
que aponta para a classe
pai.
Vamos ver um exemplo de quando podemos precisar de acesso ao método da classe pai. Suponha que temos a seguinte classe pai:
<?php
class User {
private $name;
public function setName($name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
}
?>
Suponha que na classe filha sobrescrevemos o método da classe pai:
<?php
class Student extends User {
public function setName($name) {
if (strlen($name) > 0) {
$this->name = $name;
} else {
echo 'erro no nome do estudante';
}
}
}
?>
Pode-se notar que no método sobrescrito, quando a condição é atendida, essencialmente o código do método da classe pai é executado. Isso resulta em uma duplicação desnecessária de código.
Podemos nos livrar disso chamando o método da classe pai. Vamos fazer isso:
<?php
class Student extends User {
public function setName($name) {
if (strlen($name) > 0) {
parent::setName($name); // método da classe pai
} else {
echo 'erro no nome do estudante';
}
}
}
?>
Dado o seguinte código:
<?php
class User {
private $age;
public function setAge($age) {
if ($age >= 0) {
$this->age = $age;
} else {
echo 'precisa de idade maior que 0';
}
}
}
class Employee extends User {
public function setAge($age) {
if ($age <= 120) {
if ($age >= 0) {
$this->age = $age;
} else {
echo 'precisa de idade maior que 0';
}
} else {
echo 'precisa de idade menor que 120';
}
}
}
?>
Na classe Employee, corrija
e simplifique o setter de idade, usando
o método original da classe pai.