Polimorfismo e PHP 5

Amante de PHP e de Orientação à Objetos, resolvi escrever este artigo e mostrar como a nova versão do PHP pode implementar esse poderoso recurso típico de linguagens orientadas à objetos: o Polimorfismo.

[ Hits: 56.232 ]

Por: Olavo Alexandrino em 18/04/2005 | Blog: http://oalexandrino.com


Testes



Agora vamos ao teste!

<?
$objQuadrado = new Quadrado(2);
$objCirculo = new Circulo(2);
$objCirculo2 = new Circulo(2.5);
$objQuadrado2 = new Quadrado(2.2);

$arrIFigura = array();
FiguraPolimorfismo::addItem( $arrIFigura, $objQuadrado );
FiguraPolimorfismo::addItem( $arrIFigura, $objCirculo );
FiguraPolimorfismo::addItem( $arrIFigura, $objCirculo2 );
FiguraPolimorfismo::addItem( $arrIFigura, $objQuadrado2 );


print "Imprimimos sem saber qual objeto estamos lidando: " . "<br><br>";
for ($i = 0; $i < count($arrIFigura); $i++)
{
   print $arrIFigura[$i]->getArea(). "<br>";
}
?>

Veja que a passagem por referência garante que estamos lidando com o mesmo array, e a "Indução de Tipo" no método "addItem", nos GARANTE que apenas Objetos do Tipo "IFigura" sejam adicionados a este array!

Faremos a prova!

<?
/**
* Classe Laranja
* @author Olavo Alexandrino <oalexandrino@yahoo.com.br>
* @copyright Copyright © 2004, oalexandrino.com
*/

class Laranja
{

}

$objLaranja = new Laranja();
FiguraPolimorfismo::addItem( $arrIFigura, $objLaranja );
?>

E vejam o erro que é gerado:

Fatal error: Argument 2 must implement interface IFigura in D:\sites\php5\Polimorfismo\teste.php on line 87

Mais uma prova:

<?
/**
* Classe Losango
* @author Olavo Alexandrino <oalexandrino@yahoo.com.br>
* @copyright Copyright © 2004, oalexandrino.com
*/

class Losango implements IFigura
{
    public function getArea()
    {
        return "Implementação do método! Faça Você!";
    }
}

$objLosango = new Losango();
FiguraPolimorfismo::addItem( $arrIFigura, $objLosango );

echo "<br><br>";

for ($i = 0; $i < count($arrIFigura); $i++)
{
    print $arrIFigura[$i]->getArea(). "<br>";
}
?>

Vemos que o nosso NOVO tipo de objeto Losango foi ACEITO e pode ser adicionado ao nosso ARRAY TIPADO de objetos IFigura.

Assim podemos concluir, que dessa forma, o PHP 5 consegue trabalhar da forma que linguagens fortemente tipadas. Pode não ser o perfeito, mas é um avanço extraordinário para esta nova versão.

Página anterior     Próxima página

Páginas do artigo
   1. Entendendo o conceito
   2. Exemplo do conceito
   3. Implementação
   4. Testes
   5. Comentários finais
Outros artigos deste autor

A simples classe Date Operations

Usando Blocos Dinâmicos com a Classe FastTemplate (Parte 1)

Usando Blocos Dinâmicos com a Classe FastTemplate (Parte 2)

Paginando resultados com a classe Generic Easy Pagination

Leitura recomendada

Usando Blocos Dinâmicos com a Classe FastTemplate (Parte 2)

Organizando projetos com a classe FastTemplate (parte 1)

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

Usando Blocos Dinâmicos com a Classe FastTemplate (Parte 1)

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

  
Comentários
[1] Comentário enviado por ramonklown em 19/04/2005 - 13:07h

Esse "poliformismo" já existia no PHP4. PHP sempre foi uma linguagem bem dinamica.

Me parece que o Brasil conheceu o PHP na versão 5 e só agora é que a linguagem ficou boa.

A maior novidade do PHP5 é a abilidade do PRADO, simplexml entre outras que não vou ficar listando.

[2] Comentário enviado por rsantos em 19/04/2005 - 15:43h

Vejam o conteúdo desse artigo(http://www.phpbrasil.com/articles/article.php/id/833) nele aborda quase todas as novas implementações do Php 5.

O link abaixo(http://www.phpbrasil.com/articles/article.php/id/831) tem apenas links pra outros sites.

[3] Comentário enviado por oalexandrino em 20/04/2005 - 00:00h

O Brasil já conheceu o PHP há muuuuiiito tempo e ela sempre foi uma linguagem excelente. O que acontece é que ela fica melhor a cada versão. Não entendi seu comentário.
a
Esse "polimorfismo" NÃO existia em PHP 4!

A implementação que usei depende de "Interfaces" e "Indução de Tipo".

E isso NÃO existe em PHP 4, você apenas pode simular de outras formas.

[4] Comentário enviado por xploitx em 19/05/2009 - 20:17h

Simplesmente d+.
Muito bem explicado, parabéns.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts