Polimorfismo e PHP 5
TESTES
Agora vamos ao teste!
Veja que a passagem por referência garante que estamos liadando 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!
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!
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.
Agora vamos ao teste!
<?php $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 liadando 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!
<?php /** * 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!
<?php /** * 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.
Parabéns pelo artigo, sou novo no php,mas já percebi como é facil trabalhar na linguagem php, o que é uma grande vantagem.
Mas é uma novidade para mim você ter como trabalhar no php herança multipla forçando através de interfaces e sobre o polimorfismo é sem duvida uma ferramanta essencial na programação orientada a objeto, parabéns ao artigo e a versão do php 5 :).
Mas é uma novidade para mim você ter como trabalhar no php herança multipla forçando através de interfaces e sobre o polimorfismo é sem duvida uma ferramanta essencial na programação orientada a objeto, parabéns ao artigo e a versão do php 5 :).
30/05/2005 12:47pm
(~19 anos atrás)
sobre o "&", dê uma olhada em:
- Referências ou Ponteiros em PHP?
http://www.phpbrasil.com/articles/article.php/id/649
e sobre o tipo da Interface em:
- Indução de Tipo
http://br.php.net/manual/pt_BR/language.oop5.typehinting.php
Bem vindo ao PHP!
;)
- Referências ou Ponteiros em PHP?
http://www.phpbrasil.com/articles/article.php/id/649
e sobre o tipo da Interface em:
- Indução de Tipo
http://br.php.net/manual/pt_BR/language.oop5.typehinting.php
Bem vindo ao PHP!
;)
11/04/2005 6:11pm
(~19 anos atrás)
olá! sou programador delphi... estou iniciando em php...
gostaria de uma explicação sobre a declaração do método "addItem" na classe "FiguraPolimorfismo":
public function addItem( &$arrIFigura , IFigura $objFigura)
...naum entendi o símbolo "&" no parâmetro "arrIFigura"... e num sabia q podia especificar o tipo (ou interface) do parametro, como em "objFigura".
gostaria de uma explicação sobre a declaração do método "addItem" na classe "FiguraPolimorfismo":
public function addItem( &$arrIFigura , IFigura $objFigura)
...naum entendi o símbolo "&" no parâmetro "arrIFigura"... e num sabia q podia especificar o tipo (ou interface) do parametro, como em "objFigura".
11/04/2005 3:40pm
(~19 anos atrás)
Cara sem querer fazer propaganda mas vai pra locaweb tem o php5 é so pedir e sem contar o serviço dos caras são bons!!! Mas é caro.. mas tratando de aplicações grandes, precisa de uma segurança vale a pena tenho todo serviço de host da empresa aqui hospedado la... Ai vai da sua aplicação precisar ou não de um bom provedor!?! o meu site pessoal por exemplo uso um outro tabajara rs..rs..
08/04/2005 9:00am
(~20 anos atrás)
outra coisa.. alguém conhece hospedagens que já estão rodando o PHP5?
aqui no trampo tranquilo de testar e rodar as aplicações para a empresa, mas desenvolver sites com essas implementações e depois não ter hospedagem é mals.
aqui no trampo tranquilo de testar e rodar as aplicações para a empresa, mas desenvolver sites com essas implementações e depois não ter hospedagem é mals.
05/04/2005 10:50am
(~20 anos atrás)
po, caiu como uma luva. estava tentando descobrir como implementar interfaces pra fazer um sistema de arquivos aqui.
Valeu cara.. muito bom o artigo. Mostrou o milagre e o santo, muito bem explicado.
Valeu cara.. muito bom o artigo. Mostrou o milagre e o santo, muito bem explicado.
05/04/2005 10:37am
(~20 anos atrás)
Eu programo em ASP, PHP, e plataforma .NET Mcirosoft, mas PHP tem um potencial totalmente fora do comum por ser uma linguagem free dentre outras vantagens.
Tem muita gente que fala mau de PHP, fala que JAVA é tudo, mas não é assim, .NET e PHP estão ai para mostrar que a coisa nao funciona bem assim.
PHP é muito bom! Orientado a Objetos é melhor ainda.
Parabens pelo artigo!
Tem muita gente que fala mau de PHP, fala que JAVA é tudo, mas não é assim, .NET e PHP estão ai para mostrar que a coisa nao funciona bem assim.
PHP é muito bom! Orientado a Objetos é melhor ainda.
Parabens pelo artigo!
02/04/2005 4:27pm
(~20 anos atrás)
Olavo, muito bom o artigo!
Com relação a herança múltipla, não é muita vantagem, tanto que Java não possui esse recurso (dá mais problema do que benefício).
Porém, através de interfaces, pode-se forjar a herança múltipla, pois uma classe pode herdar de outra classe e implementar uma interface ao mesmo tempo (assim como o PHP5).
O encapsulamento está no uso de classes, onde vc só deixa visível o que for relevante, ocultando os detalhes de implementação.
Com relação a herança múltipla, não é muita vantagem, tanto que Java não possui esse recurso (dá mais problema do que benefício).
Porém, através de interfaces, pode-se forjar a herança múltipla, pois uma classe pode herdar de outra classe e implementar uma interface ao mesmo tempo (assim como o PHP5).
O encapsulamento está no uso de classes, onde vc só deixa visível o que for relevante, ocultando os detalhes de implementação.
30/03/2005 9:57pm
(~20 anos atrás)
Já ouvi dizer que tb pode-se compilar o código em uma Dll como o .Net vai fiar melhor ainda!
embora ainda não suporte herança multipla.
embora ainda não suporte herança multipla.
30/03/2005 11:41am
(~20 anos atrás)
Parabéns pelo publicado, embora eu esteja ainda me ambientando com todo esse mundo agora. Estou estudando C++ e PHP ao mesmo tempo e estou tendo uma aula de história conceitual.
Abraços!