Probablemente esto no sea algo que vaya a comprender profundamente hasta que haya trabajado en un gran proyecto de software durante varios años. Muchos estudiantes recién graduados en ciencias de la computación le darán una respuesta con todas las palabras correctas (encapsulación, funcionalidad con datos y capacidad de mantenimiento), pero pocos entenderán realmente por qué es bueno tener todo eso.
Repasemos algunos ejemplos.
- Si se devolvieron matrices, entonces todos los valores deben calcularse por adelantado o deben devolverse muchos valores pequeños con los que puede construir los valores más complejos.
Piense en un método de API que devuelva una lista de publicaciones de WordPress. Todas estas publicaciones tienen autores, los autores tienen nombres, direcciones de correo electrónico, tal vez incluso perfiles con sus biografías.
Si está devolviendo todas las publicaciones en una matriz, deberá limitarse a devolver una matriz de ID de publicación:
[233, 41, 204, 111]
o devolviendo una matriz masiva que se parece a:
[ title: 'somePost', body: 'blah blah', 'author': ['name': 'billy', 'email': 'bill@bill.com', 'profile': ['interests': ['interest1', 'interest2', ...], 'bio': 'info...']] ]
[id: '2', .....]]
El primer caso de devolver una lista de ID no es muy útil para ti porque luego necesitas hacer una llamada a la API para cada ID para obtener información sobre esa publicación.
El segundo caso obtendrá mucha más información de la que necesita el 90% del tiempo y estará haciendo mucho más trabajo (especialmente si alguno de esos campos es muy complicado de construir).
Un objeto, por otro lado, puede proporcionarle acceso a toda la información que necesita, pero aún no ha obtenido esa información. La determinación de los valores de los campos se puede hacer de forma perezosa (es decir, cuando se necesita el valor y no de antemano) cuando se usa un objeto.
- Las matrices exponen más datos y capacidades de las previstas
Vuelva al ejemplo de la matriz masiva que se devuelve. Ahora es probable que alguien construya una aplicación que repita cada valor dentro de la matriz de publicaciones y lo imprima. Si la API se actualiza para agregar solo un elemento adicional a esa matriz de publicaciones, entonces el código de la aplicación se romperá ya que imprimirá un campo nuevo que probablemente no debería. Si cambia el orden de los elementos en la matriz de publicaciones devuelta por la API, eso también romperá el código de la aplicación. Entonces, devolver una matriz crea todo tipo de posibles dependencias que un objeto no crearía.
Un objeto puede contener información dentro de él que le permitirá brindarle una funcionalidad útil. Un objeto de publicación, por ejemplo, podría ser lo suficientemente inteligente como para devolver las publicaciones anteriores o siguientes. Una matriz nunca podría hacer eso por ti.
Todos los beneficios de los objetos mencionados anteriormente ayudan a crear un sistema más flexible.
count()oarray_*()funciones en ellos (al menos en lo que respecta a almacenar / devolver datos clave => valor). Nadie parece mencionarlo, ¿o me estoy perdiendo algo?