Это, вероятно, не то, что вы глубоко понимаете, пока не проработаете над большим программным проектом в течение нескольких лет. Многие новые специалисты в области информатики дадут вам ответ со всеми правильными словами (инкапсуляция, функциональность с данными и ремонтопригодность), но мало кто действительно поймет, почему все это хорошо.
Давайте рассмотрим несколько примеров.
- Если массивы были возвращены, то либо все значения должны быть вычислены спереди, либо нужно вернуть много маленьких значений, из которых вы можете построить более сложные значения.
Подумайте о методе API, который возвращает список сообщений WordPress. У этих должностей есть авторы, авторы имеют имена, адрес электронной почты, возможно, даже профили с их биографиями.
Если вы возвращаете все должности в массиве, то придется либо ограничить себя возвращающую массив идентификаторов сообщения:
[233, 41, 204, 111]
или возвращая массивный массив, который выглядит примерно так :
[ title: 'somePost', body: 'blah blah', 'author': ['name': 'billy', 'email': '[email protected]', 'profile': ['interests': ['interest1', 'interest2', ...], 'bio': 'info...']] ]
[id: '2', .....]]
Первый случай возвращения списка идентификаторов не очень полезно для вас, потому что тогда вам нужно сделать вызов API для каждого идентификатора, чтобы получить какую-то информацию об этой должности.
Второй случай доставит больше информации, чем вам понадобится 90% времени, и будет делать больше работы (особенно если любое из этих полей очень сложно построить).
Объект, с другой стороны, может предоставить вам доступ ко всей необходимой вам информации, но пока не на самом деле вытащил эту информацию. Определение значений полей может производиться лениво (т. Е. Когда значение необходимо, а не заранее) при использовании объекта.
- Массивы разоблачить больше данных и возможностей, чем планировалось
Вернитесь к примеру массивного массива возвращается. Теперь кто-то, вероятно, может создать приложение, которое выполняет итерацию по каждому значению внутри массива post и печатает его. Если API обновлен, чтобы добавить только один дополнительный элемент в этот пост-массив, тогда код приложения собирается сломаться, так как он будет печатать новое поле, которое, вероятно, не должно. Если порядок элементов в массиве сообщений, возвращаемых API, изменится, это также нарушит код приложения. Поэтому возвращение массива создает всевозможные зависимости, которые объект не создавал.
Объект может содержать информацию внутри него, что позволит ему обеспечить полезную функциональность для вас. Например, объект post может быть достаточно умным, чтобы возвращать предыдущие или следующие сообщения. Массив не мог сделать это для вас.
Все преимущества объектов, упомянутых выше, помогают создать более гибкую систему.
Мне это интересно в отношении * недостатков * объектов, таких как невозможность использовать функции 'count()' или 'array _ *()' на них (по крайней мере, в отношении сохранения/возврата ключа => данные значения). Никто, кажется, не упоминает об этом, или я чего-то не хватает? –
Объекты могут быть сделаны счетными и итерабельными, реализуя интерфейсы счетчика или итератора. Проверьте также http://www.php.net/manual/en/book.spl.php. – simshaun
Если SPL установлен и вы реализуете интерфейс, счетный для вашего класса объектов, то вы можете вызвать 'count()' на объект. – Nobody