Falhas no Suporte OOP do PHP
Ainda assim existem outras limitações para atrapalhar a vida do programador. O PHP não suporta que trabalhemos como referências encadeadas retornadas por funções. Supondo que existisse o seguinte método na classe "Cesta" :
Este método retorna "a referência do objeto referenciado pelo atributo $item". O PHP não permite acessar esta referência da seguinte forma :
É preciso utilizar uma variável temporária para realizar a operação.
Problema mais sério ocorre quando queremos serializar um objeto. Serializar consiste no ato de "transformar" um objeto em string para que possamos gravá-lo num arquivo ou banco de dados, com o objetivo de recurperarmos ele mais tarde. As funções serialize() e unserialize() realizam esta tarefa.
A questão é que ao serializar um objeto que tenha referências a outros objetos, estas referências são convertidas em cópias. Voltando ao exemplo: ao serializar um objeto do tipo "Cesta", o atributo $item vai conter uma cópia do objeto que antes ele referenciava.
Novamente, os programados oriundos de outras linguagens devem estar atentos a estas questões, ou verão situações realmente inesperadas!
Diante de todas estas questões, eu concluo que atualmente o PHP apenas simula suporte a objetos, não existindo uma implementação real do paradigma OO. Alguns programadores PHP ficam realmente revoltados quando eu coloco esta opinião. Entretanto, examinando friamente a questão (também sou partidário do PHP), não posso chegar à outra conclusão.
A boa notícia para os programadores OO é que o novo Zend Engine que está rodando no PHP 4.3-dev, corrige a maioria dos problemas descritos aqui. Com este novo engine, objetos são objetos, existe encapsulamento, são introduzidas o conceito de exceptions (finalmente um tratamento de erros de verdade! ). Acho que ainda não vai existir polimorfismo, mas isto é uma caracterísitca da linguagem PHP, que não é "fortemente tipada".
Na minha opnião a nova versão do Zend Engine vai fazer do PHP uma linguagem realmente madura e apta a ser aplicada em projetos de qualquer dimensão.
<?php function &getItem() { return &$this->item; } ?>
Este método retorna "a referência do objeto referenciado pelo atributo $item". O PHP não permite acessar esta referência da seguinte forma :
<?php $umaCesta->getItem()->apresente(); // Nao funciona $item = $umaCesta->getItem(); $item->apresente(); ?>
É preciso utilizar uma variável temporária para realizar a operação.
Problema mais sério ocorre quando queremos serializar um objeto. Serializar consiste no ato de "transformar" um objeto em string para que possamos gravá-lo num arquivo ou banco de dados, com o objetivo de recurperarmos ele mais tarde. As funções serialize() e unserialize() realizam esta tarefa.
A questão é que ao serializar um objeto que tenha referências a outros objetos, estas referências são convertidas em cópias. Voltando ao exemplo: ao serializar um objeto do tipo "Cesta", o atributo $item vai conter uma cópia do objeto que antes ele referenciava.
Novamente, os programados oriundos de outras linguagens devem estar atentos a estas questões, ou verão situações realmente inesperadas!
Diante de todas estas questões, eu concluo que atualmente o PHP apenas simula suporte a objetos, não existindo uma implementação real do paradigma OO. Alguns programadores PHP ficam realmente revoltados quando eu coloco esta opinião. Entretanto, examinando friamente a questão (também sou partidário do PHP), não posso chegar à outra conclusão.
A boa notícia para os programadores OO é que o novo Zend Engine que está rodando no PHP 4.3-dev, corrige a maioria dos problemas descritos aqui. Com este novo engine, objetos são objetos, existe encapsulamento, são introduzidas o conceito de exceptions (finalmente um tratamento de erros de verdade! ). Acho que ainda não vai existir polimorfismo, mas isto é uma caracterísitca da linguagem PHP, que não é "fortemente tipada".
Na minha opnião a nova versão do Zend Engine vai fazer do PHP uma linguagem realmente madura e apta a ser aplicada em projetos de qualquer dimensão.
fernando, pelo amor de Deus... publica seu artigo sobre php com uml.. intertessantíssimo cara!!!!
04/10/2004 6:29pm
(~20 anos atrás)
Tenho acompanhado este debate e realmente utilizar OO é algo que traz mudança de cultura, isto é, os Modelos tem de ser desenvolvidos pensando OO.
Agora o PHP tem um poder maravilhoso e acredito que em breve estará dando suporte completo a esta nova metodologia.
Agora o PHP tem um poder maravilhoso e acredito que em breve estará dando suporte completo a esta nova metodologia.
01/03/2004 2:17pm
(~21 anos atrás)
Desenvolvendo em PHP Orientado a Objetos pude aplicar parte do MVC(Modelo Visão Controlador) Framework Model II.
Tive bastante sucesso na implementação, além disso, instalar, alterar e remover módulos no sistema ficou mais rápido pois sei extamente onde mexer no código.
Aconselho para quem desenvolve muitos projetos simultãneos a utiliza-lo uma vez que o reaproveitamento de código neste caso é muito útil.
Tive bastante sucesso na implementação, além disso, instalar, alterar e remover módulos no sistema ficou mais rápido pois sei extamente onde mexer no código.
Aconselho para quem desenvolve muitos projetos simultãneos a utiliza-lo uma vez que o reaproveitamento de código neste caso é muito útil.
22/07/2003 2:37pm
(~21 anos atrás)
Nao existe atributos privados na versão atual do PHP 4.3.0. Todos os atributos são publicos
Atributos privados só estão disponíveis na versão 5.0, que está em versão Alpha
Atributos privados só estão disponíveis na versão 5.0, que está em versão Alpha
30/01/2003 1:26pm
(~22 anos atrás)
Daniel, parabéns pelo artigo, é bastante interessante.
Pessoal, vale lembrar que o nosso amigo Rasmus Lerdorf, o criador da PHP, afirmou que criou a linguagem por acaso, e jamais pensou que ela se tornaria o que é hoje. O suporte a OO não era (e naõ é) nativo da linguagem, mas está sendo incorporado aos poucos.
É isso aí!
Pessoal, vale lembrar que o nosso amigo Rasmus Lerdorf, o criador da PHP, afirmou que criou a linguagem por acaso, e jamais pensou que ela se tornaria o que é hoje. O suporte a OO não era (e naõ é) nativo da linguagem, mas está sendo incorporado aos poucos.
É isso aí!
15/09/2002 11:39am
(~22 anos atrás)
1 - O object Pascal provem as funcionalidades de orientação objeto
2 - O PHP Group nao recomenda uso intensivo da OO, justamente porque ela nao foi corretamente implementada (ainda) no PHP. Mesmo assim, como seria de se esperar , o PHP Group sabe da importancia de um bom suporte a OO , que no Zend Engine 2 , as falhas foram corrigidas
3 - É claro que da pra programar sem o paragdima OO. Ninguem disse que nao podia. Mas existe um consenso entre os desenvolvedores que o paradigma OO e mais eficiente que o paradigma orientado a funções ou eventos. Nao sou que estou afirmando isto, basta ler as publicacoes de desenvolvimento de software (ou desenvolver OO e constatar voce mesmo)
2 - O PHP Group nao recomenda uso intensivo da OO, justamente porque ela nao foi corretamente implementada (ainda) no PHP. Mesmo assim, como seria de se esperar , o PHP Group sabe da importancia de um bom suporte a OO , que no Zend Engine 2 , as falhas foram corrigidas
3 - É claro que da pra programar sem o paragdima OO. Ninguem disse que nao podia. Mas existe um consenso entre os desenvolvedores que o paradigma OO e mais eficiente que o paradigma orientado a funções ou eventos. Nao sou que estou afirmando isto, basta ler as publicacoes de desenvolvimento de software (ou desenvolver OO e constatar voce mesmo)
15/08/2002 7:56pm
(~22 anos atrás)
Nunca mechi com tal linguagem, mas sei que é totalmente orientada a objetos.
Parece com java, com perl com php, c e com nada ao mesmo tempo.
Vale a curiosidade.
Parece com java, com perl com php, c e com nada ao mesmo tempo.
Vale a curiosidade.
12/08/2002 7:30am
(~22 anos atrás)
Dot net se acharem melhor é outra idéia muito diferente de php...
.net ta mais proximo de web services da ibm, que ja vi coisas funcionando ao inves do .net
.net ta mais proximo de web services da ibm, que ja vi coisas funcionando ao inves do .net
12/08/2002 7:28am
(~22 anos atrás)
Fernando,
Voce esta descrevendo um projeto em 3 camadas (interface, negocio e persitencia) que muitos programadores ja usam, mesmo nao sendo projetos OO . Veja um artigo sobre isto
no site www.zend.com.
Discordo com alguma diretivas de seu projeto :
"Nao passar objetos entre classes, usar arrays estruturados".
Acho que vai contra o paradigma OO, que preza pela comunicação entre objetos.
"Nao serialize objetos" - Como voce passa um objeto de uma pagina para outra? OK, concordo que o PHP falha na serializacao...
Quando voce terminar seu projeto publique na Web, vai ser muito util...
Saudações,
Daniel Melo
Voce esta descrevendo um projeto em 3 camadas (interface, negocio e persitencia) que muitos programadores ja usam, mesmo nao sendo projetos OO . Veja um artigo sobre isto
no site www.zend.com.
Discordo com alguma diretivas de seu projeto :
"Nao passar objetos entre classes, usar arrays estruturados".
Acho que vai contra o paradigma OO, que preza pela comunicação entre objetos.
"Nao serialize objetos" - Como voce passa um objeto de uma pagina para outra? OK, concordo que o PHP falha na serializacao...
Quando voce terminar seu projeto publique na Web, vai ser muito util...
Saudações,
Daniel Melo
08/08/2002 10:17am
(~22 anos atrás)
Uma coisa é manter arquivado artigos úteis, outra coisa é manter artigos que se tornaram inválidos. Com o PHP 5 muita coisa que você disse aqui já era!
[]s