PHP5 Orientado a Objetos: Visibilidade, herança e extensões de classes

Este artigo tratará sobre visibilidade, herança e extensão de classes (PHP Orientado a Objetos) com uma linguagem simples e de fácil entendimento, voltada principalmente para aqueles que desejam iniciar sua aventura no PHP-OO.

[ Hits: 33.583 ]

Por: EVERTON DA ROSA em 08/06/2009 | Blog: http://everton3x.github.io


Estendendo classes



Estender uma classe significa criar uma classe (classe-filha) que irá modificar e (ou) ampliar as funcionalidades de outra classes (classe-pai).

Vamos ver isso na prática?

Primeiro vamos repetir o código da classe MensagemSimples (somente para lembrarmos dele), que será a nossa classe-pai.

class MensagemSimples {
      protected $titulo;
      protected $texto;

      protected function setTitulo($valor){
         $this->titulo = $valor;
      }

      protected function setTexto($valor){
         $this->texto = $valor;
      }

      function printTitulo($valor){
         $this->setTitulo($valor);
         echo $this->titulo;
      }

      function printTexto($valor){
         $this->setTexto($valor);
         echo $this->texto;
      }
}

Agora, vamos criar a classe-filha:

class MensagemBonita extends MensagemSimples {

}

Vejam que eu inicio com class MensagemBonita, que é o nome da classe-filha, porém não paro aí: eu acrescento a palavra reservada extends seguida do nome da classe-pai, que é MensagemSimples.

Isso significa que a classe MensagemBonita ESTENDE a classe MensagemSimples.

Agora vamos colocar algum código na classe-filha:

class MensagemBonita extends MensagemSimples {
   protected $cor;

   public function setCor($cor){
      $this->cor = $cor;
   }

   public function imprime($titulo,$texto){
      $mensagem = '<h1 style="color: '.$this->cor.'">'.$titulo.'</h1><p>'.$texto.'</p>';
      echo $mensagem;
   }
}

No código da classe MensagemBonita temos a propriedade $cor, que armazena a cor da fonte do título da mensagem, a qual será atribuída através do método setCor().

O método imprime() recebe o valor a ser utilizado como título e o valor de texto e imprime na tela a mensagem estilizada com a cor.

Vamos testar isso?

$msg = new MensagemBonita;
$msg->setCor('Red');
$msg->imprime('Título da mensagem','Texto da mensagem.');

No navegador deverá aparecer:

Título da mensagem (em vermelho e maior).

Texto da mensagem.

Vemos que a classe inicializada foi a nossa classe-filha, o resto do código você já conhece.

Caso você não tenha percebido, nós estendemos a classe MensagemSimples, porém não fizemos nada com ela ainda. Isso foi proposital, pois na parte seguinte deste artigo, vamos começar a brincar com herança e visibilidade, inclusive com private.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Começando a entender visibilidade
   3. Primeiros passos na visibilidade de métodos
   4. Estendendo classes
   5. Conhecendo mais a extensão de classes
   6. Resumo e conclusão
Outros artigos deste autor

SLiM: Simple Login Manager - Mini review

Utilizando endereços personalizados no seu servidor web: passo-a-passo

SliTaz: Mini-review desta mini-distribuição Linux

Qual o valor de seu trabalho

PHP Orientado a Objetos: Para quem está começando

Leitura recomendada

Utilizando PEAR

Organizando projetos com a classe FastTemplate (parte 1)

Organizando projetos com a classe FastTemplate (parte 2)

Administrando usuários no GNU/Linux e Samba via web com PHP

Criando um ambiente de desenvolvimento web livre com Eclipse e PHP

  
Comentários
[1] Comentário enviado por removido em 08/06/2009 - 15:44h

Muito bom o artigo Everton, está de parabéns!

[2] Comentário enviado por will fernando em 11/07/2009 - 09:16h

Muito bom ! Parabéns !

[3] Comentário enviado por wm em 16/07/2009 - 07:16h

excelente artigo

[4] Comentário enviado por henbran em 26/05/2010 - 08:53h

Bom Dia.
ESTOU COM UMA DÚVIDA EM HERANÇA EXTENDS

tenho 1 classe:
___________________________________
class A{
public function funcaoA(){
//detalhes
}
}
ººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº

Então tenho outra classe:
___________________________________
class B extends A{
public function funcaoA(){
//detalhes
}
}
¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
Quando tento instanciar a classe B, sendo estendida da classe A, não instancia.
ex. $instanciaB = new B(); // não funciona.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Se tiro o extends A da declaração da classe B (ficando assim: class B{ ... }), então instancia.
................................................................................................................
Já cheguei a testar todas as classes vazias, tentando saber se haveria algo de errado com as functions, porém mesmo assim continua no mesmo problema.
*******************************************************************************************
POR FAVOR, COMO EU DEVERIA FAZER ENTÃO???

[5] Comentário enviado por concurso em 08/10/2012 - 13:29h

Incrível o conteúdo, bem elaborado e explicado!

Estou iniciando na prática em php, espero que dê tudo certo.rs

Tem mais conteúdo de php elaborado por ti?

[6] Comentário enviado por everton3x em 18/10/2012 - 08:40h

Obrigado pelo comentário concurso.
Tem mais material sim. É só procurar na lista de artigos do meu perfil http://www.vivaolinux.com.br/perfil/verPerfil.php?login=everton3x


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts