Falhas no Suporte OOP do PHP
Dando continuidade a questão de referências, vamos examinar a classe "Cesta". Observem o método "setItem" :
Este método deveria fazer com que o atributo "item" apontasse para o objeto $pItem passado como parametro, certo? Deveria, mas não o faz.
No momento é que este método é chamado, a variável $pItem vai conter uma cópia do objeto passado como parâmetro.
No exemplo acima, o parâmetro $pItem vai ser nada mais do que uma cópia de $umItem. Ou seja, se alguém modificar algo no objeto $umItem, esta modificação não vai ser percebida em $umaCesta, pois agora existem 2 objetos em questão.
A situação poderia ser resolvida assim :
Infelizmente a situação ainda não está resolvida. O parametro $pItem agora não guarda uma cópia do objeto, e sim faz referência a um objeto. Entretando, o comando de atribuição "$this->item=$pItem" vai gerar uma cópia do objeto referenciado por $pItem! Lembram-se que uma atribuição de objetos gera uma cópia no PHP?
Precisamos então de outro operador de referência:
Finalmente chegamos ao resultado que esperávamos. Agora estamos dizendo "Quero uma referência do objeto que você está referenciando".
Complicado? Sim, realmente é! Esta implementação traz para o programador toda a responsabilidade de gerenciar referências a objetos.
<?php function setItem($pItem) { $this->item = $pItem; } ?>
Este método deveria fazer com que o atributo "item" apontasse para o objeto $pItem passado como parametro, certo? Deveria, mas não o faz.
No momento é que este método é chamado, a variável $pItem vai conter uma cópia do objeto passado como parâmetro.
<?php $umaCesta->setItem($umItem); ?>
No exemplo acima, o parâmetro $pItem vai ser nada mais do que uma cópia de $umItem. Ou seja, se alguém modificar algo no objeto $umItem, esta modificação não vai ser percebida em $umaCesta, pois agora existem 2 objetos em questão.
A situação poderia ser resolvida assim :
<?php function setItem(&$pItem) { $this->item = $pItem; } ?>
Infelizmente a situação ainda não está resolvida. O parametro $pItem agora não guarda uma cópia do objeto, e sim faz referência a um objeto. Entretando, o comando de atribuição "$this->item=$pItem" vai gerar uma cópia do objeto referenciado por $pItem! Lembram-se que uma atribuição de objetos gera uma cópia no PHP?
Precisamos então de outro operador de referência:
<?php function setItem(&$pItem) { $this->item = &$pItem; } ?>
Finalmente chegamos ao resultado que esperávamos. Agora estamos dizendo "Quero uma referência do objeto que você está referenciando".
Complicado? Sim, realmente é! Esta implementação traz para o programador toda a responsabilidade de gerenciar referências a objetos.
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