¿Cómo paso los datos de forma orientada a objetos en PHP?

11

Creo que incluso cuando trabajo con un marco MVC (por ejemplo, CodeIgniter), recurro regularmente a pasar matrices anidadas en lugar de objetos.

Esto no sigue bien mi comprensión de la orientación a objetos. Por ejemplo, si tuviera que portar el código a Java, no soñaría con pasar matrices (o vectores, o lo que sea) por ahí.

Me preguntaba si esta es la forma adecuada de manejar los datos. ¿Hay alguna razón por la cual las matrices se pasan de esta manera en PHP, o por qué los objetos no se usan? ¿Cuál es la mejor manera de pasar datos?

Mateo
fuente

Respuestas:

8

No confunda OO de Java con PHP. Java es un lenguaje de paradigma único, lo que significa que solo hace OO. PHP, por otro lado, es un lenguaje de paradigmas múltiples, puede hacer programación funcional u OO o ambos.

Ahora no existe una implementación "mala" de OO. La OO de Java no es una implementación definitiva que cualquier otro lenguaje debería o debe seguir. Hay algunos conceptos definitivos, y ambos lenguajes los implementan completamente a su manera (Java desde el principio, PHP desde la versión 5).

Entonces, para responder a su pregunta: lo que hace CI y lo que está haciendo con él está en el mundo de PHP. Las matrices de PHP son una de sus estructuras más flexibles y útiles y, en realidad, es bueno usar matrices sobre objetos cuando sus datos son solo información (no lleve lógica con ellos). El código OO completo no es lo mismo que "solo código OO".

Si está comenzando con PHP, use Java como referencia para buenas prácticas de OO, pero no limite su comprensión de PHP debido a lo que dice "Java lo hace de manera diferente". Realmente puedes meter la pata en ambos, el paradigma no te salvará si no entiendes los conceptos.

Si, en cualquier caso, encuentra Java más a su gusto (como preferencia personal), consulte Ruby para el desarrollo web, están un poco más estrechamente relacionados.

Yannis
fuente
¿Por qué no debemos confundir Java OO con PHP OO? Son más o menos lo mismo, excepto que PHP tiene un tipo de datos nativo de matriz / hash.
Martin Wickman
Las implementaciones son bastante similares. Me refería a cómo se usan en ambos idiomas.
Yannis
Tengo un problema en OOP. Quiero crear un diseño OOP para una aplicación (base PHP), donde un objeto dependerá de otros objetos. ¿Cómo manejo esto en PHP? por favor ayúdame ...
Imran Khan
Escenario de ejemplo: el objeto de hotel tiene un objeto de habitación, donde un objeto de habitación tiene que fechar objetos ... y un objeto de fecha tiene precios para tipos de persona. Ahora cómo manejar este tipo de escenario en PHP por base OOP (porque hay datos grandes que necesitan procesamiento en cada nivel).
Imran Khan
@Walter, estoy esperando tu respuesta ... por favor, ayúdame.
Imran Khan
2

Usa objetos en lugar de matrices solo porque sus objetos no son un paradigma OO, son solo preferencias personales :)

Los objetos proporcionan una finalización útil del código en IDE, se pueden utilizar interfaces (sugerencias de tipo) y herencia.

Si desea usar objetos en lugar de matriz porque ve algún beneficio, úselos, pero si desea usarlos solo porque son objetos, no pierda su tiempo en esta refactorización :)

ONZ_
fuente
" los objetos de uso al igual que las matrices requerirán más memoria y CPU " . Esto no es (siempre) cierto. Un objeto que contiene la misma cantidad de datos con una matriz ocupará casi exactamente la misma cantidad de memoria.
Yannis
@ Yannis Rizos, sí, los objetos incluso pueden usar menos memoria, editado.
OZ_
No es solo que puedan usar menos memoria, es que su uso de memoria es irrelevante porque es trivial en comparación con otros aspectos del rendimiento de la memoria del sistema y los beneficios del uso de objetos. Si nos importara tanto el uso de la memoria, nunca usaríamos objetos. Lo que nos importa es que los objetos nos dan mejores herramientas para razonar y construir sistemas.
Rein Henrichs
@Rein Henrichs, lo sé, gracias. Es por eso que todas las palabras sobre 'memoria' fueron eliminadas de mi respuesta. No estoy tratando de hacer una tonta optimización, pero estoy seguro de objects just because they are objectsque no es una razón para refactorizar :) Lea mi respuesta, no solo comentarios.
OZ_
bastante justo, comenté antes de las ediciones.
Rein Henrichs
1

Realmente no pasa datos en un sistema OO, pasa objetos alrededor. La diferencia es que los objetos contienen comportamiento y datos. Es por eso que lo llaman orientado a objetos y no orientado a datos.

Siempre que no necesite un comportamiento con sus datos, las matrices php antiguas simples son tan buenas (o malas, según su punto de vista) como los objetos de valor.

Martin Wickman
fuente
0

Creo que esto es solo una cuestión de ajuste: hay muchas implementaciones de "objetos" en la programación: Python y Javascript tienen propiedades sorprendentemente diferentes. PHP OO es posiblemente un truco: las matrices PHP no son "objetos" en el sentido tradicional, pero tienen un propósito obvio. A menos que desee que los datos tengan un COMPORTAMIENTO personalizado, ¿por qué usar un objeto?

EDITAR:

re: objetos de valor inmutable

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

sunwukung
fuente
Para dar a los datos una estructura confiable. Sí, puedo construir una función que genere un formato / anidamiento particular de la matriz, pero quién puede decir que no escribo otra función que la modifique ligeramente y luego la pase.
Mateo
1
claro, entonces necesitaría un objeto para proteger el acceso variable, ya que no hay equivalentes PHP de tuplas de Python, por ejemplo. Pero ahí lo tienes: has definido el problema, solo tienes que usar las construcciones disponibles para el lenguaje ... o simplemente aprender a vivir con sus "peculiaridades". Agregué un enlace a mi publicación inicial que tiene una discusión interesante sobre el problema.
sunwukung