Como passo os dados da maneira orientada a objetos no PHP?

11

Acho que, mesmo ao trabalhar com uma estrutura MVC (por exemplo, CodeIgniter), eu regularmente recorro a passar matrizes aninhadas em vez de objetos.

Isso não segue meu entendimento de orientação a objetos. Por exemplo, se eu portasse o código para Java, não sonharia em passar matrizes (ou Vetores, ou o que seja) por aí.

Eu queria saber se esta é a maneira adequada de lidar com dados. Existe uma razão pela qual as matrizes são passadas dessa maneira no PHP ou por que os objetos não são usados? Qual é a melhor maneira de transmitir dados?

Mateus
fonte

Respostas:

8

Não confunda OO do Java com PHP. Java é uma linguagem de paradigma único, o que significa que ele faz apenas OO. O PHP, por outro lado, é uma linguagem de paradigmas múltiplos, você pode fazer programação funcional ou OO ou ambos.

Agora não existe uma implementação "ruim" do OO. OO do Java não é uma implementação definitiva que todas as outras linguagens devem ou devem seguir. Existem alguns conceitos definitivos, e ambas as linguagens os implementam totalmente da sua maneira (Java desde o início, PHP desde a versão 5).

Portanto, para responder à sua pergunta: O que o CI faz e o que você está fazendo com ele está certo no mundo do PHP. As matrizes do PHP são uma de suas estruturas mais flexíveis e úteis e é realmente bom usar matrizes sobre objetos quando seus dados são apenas informações (não carregue lógica com eles). Código OO completo não é a mesma coisa que "apenas código OO".

Se você estiver iniciando com PHP, use Java como referência para boas práticas de OO, mas não limite seu entendimento do PHP por causa da coisa "Java faz diferente". Você pode realmente estragar as duas coisas, o paradigma não o salvará se você não entender os conceitos.

Se, em qualquer caso, você achar que Java é mais do seu agrado (como uma preferência pessoal) consulte o Ruby para desenvolvimento na Web, eles estão um pouco mais relacionados.

yannis
fonte
Por que não devemos confundir Java OO com PHP OO? Eles são praticamente os mesmos, exceto que o PHP tem um tipo de dados de matriz / hash nativo.
Martin Wickman 28/05
As implementações são bastante semelhantes. Eu estava me referindo a como eles são usados ​​nos dois idiomas.
Yannis 28/05
Eu tenho um problema no OOP. Eu quero criar um design OOP para um aplicativo (base PHP), em que um objeto depende de outros objetos. Como eu manejo isso em PHP? plz me ajudar ...
Imran Khan
Cenário de exemplo: o objeto Hotel possui objetos Room, onde um objeto room tem que objetos Date ... e um objeto Date têm preços para tipos de pessoas. Agora, como lidar com esse tipo de cenário no PHP pela base de OOP (porque há dados grandes que precisam ser processados ​​em cada nível).
Imran Khan
@ Walter, estou aguardando sua resposta .... plz me ajude.
precisa
2

Usa objetos em vez de matrizes apenas porque são objetos não é um paradigma OO, são apenas preferências pessoais :)

Objetos oferece fácil conclusão de código no IDE, interfaces (dicas de tipo) e herança podem ser usadas.

Se você deseja usar objetos em vez de matriz porque vê algum benefício - use-os, mas se quiser usá-los apenas porque são objetos - não perca seu tempo com essa refatoração :)

OZ_
fonte
" objetos de uso, assim como matrizes, ocupam mais memória e CPU. " Isso não é (sempre) verdadeiro. Um objeto que contém a mesma quantidade de dados com uma matriz ocupará quase exatamente a mesma quantidade de memória.
27511 yannis
@ Yannis Rizos, sim, os objetos ainda podem usar menos memória, editados.
OZ_
Não é apenas o fato de que eles podem usar menos memória, é que o uso de memória é irrelevante porque é trivial em comparação com outros aspectos do desempenho da memória do sistema e com os benefícios do uso de objetos. Se nos importássemos tanto com o uso da memória, nunca usaríamos objetos. O que nos preocupa é que os objetos nos fornecem melhores ferramentas para raciocinar e construir sistemas.
Rein Henrichs
@ Rein Henrichs, eu sei, obrigado. É por isso que todas as palavras sobre 'memória' foram removidas da minha resposta. Não estou tentando fazer otimização tola, mas com certeza objects just because they are objectsnão é um motivo para refatoração :) Leia minha resposta, não apenas comentários.
OZ_
justo, comentei antes das edições.
Rein Henrichs
1

Você realmente não transmite dados em um sistema OO - transmite objetos . A diferença é que os objetos contêm comportamento e dados. É por isso que eles chamam de orientada a objetos e não de dados.

Contanto que você não precise se comportar com seus dados, as matrizes php antigas e simples são tão boas (ou ruins, dependendo do seu ponto de vista) quanto os objetos de valor.

Martin Wickman
fonte
0

Eu acho que isso é apenas uma questão de ajuste - existem muitas implementações de "objetos" na programação - Python e Javascript têm propriedades surpreendentemente diferentes. O PHP OO é indiscutivelmente um hack - as matrizes PHP não são "objetos" no sentido tradicional - mas elas servem a um propósito óbvio. A menos que você queira que os dados tenham o COMPORTAMENTO personalizado, por que usar um objeto?

EDITAR:

re: objetos de valor imutável

http://bradley-holt.com/2010/09/immutable-value-objects-in-php/

sunwukung
fonte
Para fornecer aos dados uma estrutura confiável. Sim, eu posso criar uma função que gera um determinado formato / aninhamento de matriz, mas quem pode dizer que não escrevo outra função que a modifique um pouco e depois a repasse.
Matthew
1
claro - então você precisaria de um objeto para proteger o acesso variável - já que não há equivalentes PHP de tuplas Python, por exemplo. Mas lá está você - você definiu o problema, basta usar as construções disponíveis para o idioma ... ou apenas aprender a conviver com suas "peculiaridades". Eu adicionei um link para o meu post inicial que tem uma discussão interessante sobre o problema.
28411 sunwukung