Вероятно, вы не сможете глубоко понять это, пока не проработаете несколько лет над большим программным проектом. Многие новички в области компьютерных наук дадут вам ответ, используя все нужные слова (инкапсуляция, функциональность с данными и ремонтопригодность), но немногие действительно поймут, почему все это хорошо иметь.
Давайте рассмотрим несколько примеров.
- Если были возвращены массивы, то либо все значения должны быть вычислены заранее, либо нужно вернуть много маленьких значений, из которых вы можете построить более сложные значения.
Подумайте о методе 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_*()функций на них (по крайней мере, в отношении хранения / возврата данных ключа => значения). Кажется, никто об этом не упоминает, или я что-то упускаю?