Herança em PHP

A programação orientada a objectos tem um mecanismo chamado herança pela que qual se podem definir classes a partir de outras classes. As classes realizadas a partir de outra classe ou melhor dito, que derivam de outra classe, chamam-se classes derivadas.

As classes derivadas herdam todos os atributos e métodos da classe base, para além de poder ter tantos atributos e métodos novos como se desejem.

Para ampliar o exemplo que temos tado a utilizar, a classe Caixa, vamos criar uma classe derivada chamada Caixa_tematica. Esta classe herda de caixa, mas tem um “tema”, que é a descrição do tipo de coisas que metemos na caixa. Com isto podemos ter varias caixas, cada uma com coisas de um tema concreto.

class Caixa_tematica extends Caixa{
var $tema;

function define_tema($novo_tema){
$this->tema = $novo_tema;
}
}

Nesta classe herdamos de Caixa, por tanto temos à nossa disposição todos os atributos e métodos da classe base. Também se definiu um novo atributo, chamado $tema, e um método, chamado define_tema(), que recebe o tema com o que se deseja etiquetar a caixa.

Poderíamos utilizar a classe Caixa_tematica de maneira similar a como fazíamos com a classe Caixa original

$minhacaixa_tematica = new Caja_tematica();
$minhacaixa_tematica->define_tema(“Cabos e conectores”);
$minhacaixa_tematica ->introduz(“Cabo de rede”);
$minhacaixa_tematica ->introduz(“Conetor RJ45”);
$minhacaixa_tematica ->mostra_conteudo();

Neste caso, o resultado que se obtém é parecido ao que se obtém para a classe base. Mas, quando se mostra o conteúdo de uma caixa, o mais interessante seria, que se indicara também o tipo de objectos que contem a caixa temática. Para isso, temos que redefinir o método mostra_conteudo().

Redefinir métodos em classes derivadas

Redefinir métodos significa voltar a codifica-los, isto é, voltar a escrever o seu código para a classe derivada. Neste caso, temos que redefinir o método mostra_conteudo() para que mostre também o tema da caixa.

Para redefinir um método, o único que devemos fazer é voltar a escrever dentro da classe derivada.

function mostra_conteudo(){
echo “Conteudo da caixa de <b>” . $this->tema . “</b>: ” . $this->conteudo;
}

Neste exemplo codificámos de novo o método inteiro para mostrar os dados completos.

Nalgumas ocasiões é muito útil basear-se na definição de um método da classe base para realizar as acções da classe derivada. Por exemplo, para este exemplo concreto, temos de definir um construtor para a classe Caixa temática, no que também se inicie o tema da caixa. Como já existe um método construtor na classe base, não vale a pena reescrever o código de este, o melhor é chamar ao construtor que tínhamos definido na classe Caixa original, com o que se iniciarão todos os dados da classe base, e depois realizar a iniciação para os atributos da própria classe derivada.

Para chamar a um método da classe pai dentro do código de um método que estamos a redefinir, utilizamos uma sintaxe como esta:

function Caixa_tematica($altura=1,$grossura=1,$largura=1,$cor=”preto”,$tema=”Sem classificação”){
parent::Caixa($altura,$grossura,$largura,$cor);
$this->tema=$tema;
}

Aqui vemos a redefinição de construtor, da classe Caixa, para a classe Caixa_tematica. O construtor faz primeiro uma chamada ao construtor da classe base, através de uma referência a “parent”. Depois inicia o valor do atributo $tema, que é especifico da Caixa_temática.

Na mesma linha de trabalho, podemos redefinir o método mostra_conteudo() baseando-nos no que foi declarado para a classe base. O código ficaria assim:

function mostra_conteudo(){
echo “Conteudo da caixa de <b>” . $this->tema . “</b>: “;
parent::mosta_conteudo(); }

Fonte: http://www.criarweb.com/artigos/116.php

Deixe um comentário