+4

Falhas no Suporte OOP do PHP

criado por Daniel Melo em 24/07/2002 10:56pm
Dando continuidade a questão de referências, vamos examinar a classe "Cesta". Observem o método "setItem" :

<?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.

Comentários:

Mostrando 1 - 10 de 25 comentários
Click disse:
Não entendo porque o PHP Brasil ainda não tirou seu artigo do ar.
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
20/04/2006 6:33pm (~14 anos atrás)

fernando, pelo amor de Deus... publica seu artigo sobre php com uml.. intertessantíssimo cara!!!!
04/10/2004 6:29pm (~16 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.
01/03/2004 2:17pm (~16 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.
22/07/2003 2:37pm (~17 anos atrás)

Daniel Melo disse:
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
30/01/2003 1:26pm (~18 anos atrás)

Caio Filipini disse:
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í!
15/09/2002 11:39am (~18 anos atrás)

Daniel Melo disse:
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)
15/08/2002 7:56pm (~18 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.
12/08/2002 7:30am (~18 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
12/08/2002 7:28am (~18 anos atrás)

Daniel Melo disse:
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
08/08/2002 10:17am (~18 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)