Це, мабуть, не те, що ви збираєтесь глибоко зрозуміти, доки кілька років не працювали над великим програмним проектом. Багато свіжих спеціальностей інформатики дадуть вам відповідь усіма правильними словами (інкапсуляція, функціональність із даними та ремонтопридатність), але мало хто насправді зрозуміє, чому все це добре мати.
Давайте розглянемо кілька прикладів.
- Якщо масиви були повернуті, то або всі значення потрібно обчислювати заздалегідь, або потрібно повернути багато маленьких значень, з яких ви можете будувати більш складні значення.
Подумайте про метод API, який повертає список публікацій WordPress. Всі ці дописи мають авторів, автори мають імена, електронну адресу, можливо, навіть профілі зі своїми біографіями.
Якщо ви повертаєте всі дописи в масиві, вам доведеться обмежитися поверненням масиву ідентифікаторів постів:
[233, 41, 204, 111]
або повернення масивного масиву, який виглядає приблизно так:
[ title: 'somePost', body: 'blah blah', 'author': ['name': 'billy', 'email': 'bill@bill.com', 'profile': ['interests': ['interest1', 'interest2', ...], 'bio': 'info...']] ]
[id: '2', .....]]
Перший випадок повернення списку ідентифікаторів вам не надто корисний, оскільки тоді вам потрібно зробити виклик API для кожного ідентифікатора, щоб отримати деяку інформацію про цю публікацію.
Другий випадок спричинить більше інформації, ніж потрібно 90% часу, і зробить значно більше роботи (особливо якщо будь-яке з цих полів дуже складно побудувати).
З іншого боку, об’єкт може надати вам доступ до всієї необхідної інформації, але насправді ще не отримав цю інформацію. Визначення значень полів можна виконувати ліниво (тобто коли значення потрібно, а не заздалегідь) при використанні об'єкта.
- Масиви надають більше даних і можливостей, ніж передбачалося
Поверніться до прикладу масивного масиву, який повертається. Тепер хтось, ймовірно, може створити додаток, яке перебирає кожне значення всередині масиву постів і друкує його. Якщо API оновлено, щоб додати до цього масиву постів лише один зайвий елемент, тоді код програми зірветься, оскільки він буде друкувати якесь нове поле, яке, мабуть, не повинно. Якщо порядок елементів у масиві повідомлень, що повертається API, змінюється, це також порушить код програми. Отже, повернення масиву створює всілякі можливі залежності, які об’єкт не створив би.
Об’єкт може містити в собі інформацію, яка дозволить йому надати вам корисну функціональність. Наприклад, об'єкт повідомлення може бути досить розумним, щоб повернути попередні або наступні повідомлення. Масив ніколи не міг зробити це за вас.
Усі переваги вищезазначених об’єктів допомагають створити більш гнучку систему.
count()абоarray_*()функціонування на них (принаймні щодо збереження / повернення ключа => значення даних). Здається, ніхто про це не згадує, чи мені чогось не вистачає?