Herança de classe e implementação de interface em OOP em PHP
Uma classe pode herdar de outra classe e ao mesmo tempo implementar alguma interface. Vamos considerar um exemplo prático.
Suponha que queremos criar uma classe Programmer,
que terá um nome, um salário e uma lista de linguagens
que o programador conhece.
No momento, nossa descrição da classe é bastante vaga:
sim, a classe terá nome, salário, linguagens -
mas quais métodos estarão em nossa classe?
Vamos descrever nossa classe com mais precisão usando
a interface iProgrammer:
<?php
interface iProgrammer
{
public function __construct($name, $salary);
public function getName();
public function getSalary();
public function getLangs();
public function addLang($lang);
}
?>
Suponha que vasculhamos nossas classes já implementadas
e, acontece que já temos uma classe semelhante
Employee. Ela não implementa todos os
métodos da classe Programmer, mas uma parte.
Aqui está o código da nossa classe já existente:
<?php
class Employee
{
private $name;
private $salary;
public function __construct($name, $salary)
{
$this->name = $name;
$this->salary = $salary;
}
public function getName()
{
return $this->name;
}
public function getSalary()
{
return $this->salary;
}
}
?>
É lógico, no nosso caso, fazer com que
nossa nova classe Programmer herde
parte dos métodos necessários da classe
Employee (e uma parte implementaremos
depois na própria nova classe):
<?php
class Programmer extends Employee
{
}
?>
Além disso, sabemos que a classe Pogrammer
deve implementar a interface
iProgrammer:
<?php
class Programmer implements iProgrammer
{
}
?>
Vamos combinar a herança da classe
Employee e a implementação da interface
iProgrammer:
<?php
class Programmer extends Employee implements iProgrammer
{
}
?>
O resultado é que nossa classe Pogrammer
herdará da classe Employee os métodos
__construct, getName e getSalary,
e os métodos addLang e getLangs
teremos que implementar:
<?php
class Programmer extends Employee implements iProgrammer
{
public function addLang($lang)
{
// implementação
}
public function getLangs()
{
// implementação
}
}
?>
Para a interface iProgrammer, não importa se
os métodos são nativos da classe ou herdados
- o principal é que todos os métodos descritos estejam
implementados.
Copie o código da minha classe Employee
e o código da interface iProgrammer. Não copie
meu esboço da classe Programmer -
sem espiar o meu código, implemente esta
classe você mesmo.