Obs: Esse post parte do princípio que você tem conhecimentos em PHP e está iniciando em Orientação a Objetos.
Obs2: Antes que alguém queira reclamar, eu usei os gets e sets para mostrar um exemplo simples, muito simples!
A reutilização de parte de nossos códigos é fundamental para nos dar uma maior agilidade no desenvolvimento de nossas aplicações. Quando escutamos a palavra HERANÇA logo lembramos de nossos parentes e o que herdamos ao longo dos anos. Em OO a herança tem quase o mesmo significado. No dicionário encontramos a seguinte definição para herança: “Aquilo que se herda por disposição testamentária ou por via de sucessão“. Sucessão, exatamente isso que acontece na orientação a objeto (“…acontecimentos que se seguem ou se sucedem em determinada ordem…”). Chega de filosofar e vamos direto ao ponto…
Em orientação a objetos nós utilizamos o compartilhamento de atributos e métodos entre as classes “filhas”. A classe “filha” herda automaticamente todas as características de sua classe mãe. Vamos entender melhor: Imagine uma empresa, um banco por exemplo… Independente do setor ou do cargo ocupado por cada um, todos os contratados são funcionários desse banco e possuem alguns atributos iguais (nome, endereço, telefone, salário etc). Com isso podemos criar uma classe Funcionário e, com base nessas informações, criaremos uma outra classe (Gerência) que irá herdar as informações da classe Funcionário. Veja o exemplo abaixo para entender melhor (Clique aqui para fazer download do exemplo).
<?php
/*
* Classe mãe "Funcionário". Arquivo Funcionario.php
*/
class Funcionario {
private $nome;
private $endereco;
private $telefone;
private $salario;
public function setNome($nome){
$this->nome = $nome;
}
public function getNome(){
return $this->nome;
}
public function setEndereco($endereco){
$this->endereco = $endereco;
}
public function getEndereco(){
return $this->endereco;
}
public function setTelefone($telefone){
$this->telefone = $telefone;
}
public function getTelefone(){
return $this->telefone;
}
public function setSalario($salario){
$this->salario = $salario;
}
public function getSalario(){
return $this->salario;
}
}
?>
/*
* Classe filha "Gerência". Arquivo Gerencia.php
*/
<?php
require_once "Funcionario.php";
/*
* O extends indica que a classe "Gerência" está herdando as
* caracteristicas da classe "Funcionário".
*/
class Gerencia extends Funcionario {
private $setor;
private $bonificacao;
public function setSetor($setor){
$this->setor = $setor;
}
public function getSetor(){
return $this->setor;
}
public function setBonificacao($bonificacao){
$this->bonificacao = $bonificacao;
}
public function getBonificacao(){
return $this->bonificacao;
}
}
?>
/*
* Arquivo de teste ExemploFuncionario.php
*/
<?php
require_once "Gerencia.php";
$exemploFuncionarioGerencia = new Gerencia();
$exemploFuncionarioGerencia->setSetor("Gerência");
$exemploFuncionarioGerencia->setBonificacao("R$100,00");
$exemploFuncionarioGerencia->setNome("Fernando");
$exemploFuncionarioGerencia->setEndereco("Rua dos Bobos, número 0");
$exemploFuncionarioGerencia->setTelefone("9999-8888");
$exemploFuncionarioGerencia->setSalario("R$1.000,00");
print_r($exemploFuncionarioGerencia);
?>
Resposta:
Gerencia Object
(
[setor:Gerencia:private] => Gerência;
[bonificacao:Gerencia:private] => R$100,00
[nome:Funcionario:private] => Fernando
[endereco:Funcionario:private] => Rua dos Bobos, nœmero 0
[telefone:Funcionario:private] => 9999-8888
[salario:Funcionario:private] => R$1.000,00
)
Veja que no arquivo ExemploFuncionario.php eu pude criar uma instância da classe “Gerência”. Pelo simples fato da classe Gerência estender a classe Funcionário eu pude manipular e “setar” informações referentes a classe Gerência e Funcionário.
No próximo post irei abordar o Encapsulamento. Como diria Didi Mocó… “Aguarde e confie!”