Home > OO | PHP > [PHP OO] – Herança

[PHP OO] – Herança

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!”

POSTED ON 17/09/2011, , , , , ,

Comments:1

Leave my own
  1. Tiago Davi Responder
    11/09/17

    Muito legal parabéns.

    Eu particularmente não gosto de muitos getter and setter, prefiro utilizar aqueles métodos mágicos __get __set mapeando diretamente.

    Abraço.

Leave a Reply

Trackbacks:2

Listed below are links to weblogs that reference
[PHP OO] – Herança from Fernando Valente
pingback from [PHP OO] – Encapsulamento « Fernando Valente 19/09/2011

[...] Protected (protegido): Quando um atributo ou método é definido como protected significa que ele só pode ser acessado de dentro da própria classe ou em suas classes-filha (saiba mais sobre Herança clicando aqui): [...]

pingback from [PHP OO] – Polimorfismo « Fernando Valente 21/09/2011

[...] onde em Calculo1.php nossa classe Calculo1 está herdando as características da classe Calculo2 (saiba mais sobre herança clicando aqui). Feito isso eu posso receber as resposta de Calculo1 (dividindo) e Calculo2 (somando) criando [...]

TOPO