Ce n'est probablement pas quelque chose que vous comprendrez profondément jusqu'à ce que vous ayez travaillé sur un grand projet logiciel pendant plusieurs années. Beaucoup de nouveaux majors en informatique vous donneront une réponse avec tous les bons mots (encapsulation, fonctionnalité avec des données et maintenabilité) mais peu comprendront vraiment pourquoi tout cela est bon d'avoir.
Passons en revue quelques exemples.
- Si des tableaux ont été renvoyés, alors soit toutes les valeurs doivent être calculées à l'avance, soit beaucoup de petites valeurs doivent être renvoyées avec lesquelles vous pouvez créer les valeurs les plus complexes.
Pensez à une méthode API qui renvoie une liste d'articles WordPress. Ces articles ont tous des auteurs, les auteurs ont des noms, une adresse e-mail, peut-être même des profils avec leurs biographies.
Si vous renvoyez tous les articles d'un tableau, vous devrez soit vous limiter à renvoyer un tableau d'identifiants de publication:
[233, 41, 204, 111]
ou renvoyer un tableau massif qui ressemble à quelque chose comme:
[ title: 'somePost', body: 'blah blah', 'author': ['name': 'billy', 'email': 'bill@bill.com', 'profile': ['interests': ['interest1', 'interest2', ...], 'bio': 'info...']] ]
[id: '2', .....]]
Le premier cas de renvoi d'une liste d'identifiants ne vous est pas très utile, car vous devez alors effectuer un appel API pour chaque identifiant afin d'obtenir des informations sur cette publication.
Le second cas va extraire beaucoup plus d'informations que vous n'en avez besoin 90% du temps et faire beaucoup plus de travail (surtout si l'un de ces champs est très compliqué à construire).
Un objet, d'autre part, peut vous donner accès à toutes les informations dont vous avez besoin, mais ne les a pas encore extraites. La détermination des valeurs des champs peut être effectuée paresseusement (c'est-à-dire lorsque la valeur est nécessaire et pas à l'avance) lors de l'utilisation d'un objet.
- Les baies exposent plus de données et de capacités que prévu
Revenez à l'exemple du tableau massif renvoyé. Maintenant, quelqu'un peut probablement créer une application qui itère sur chaque valeur à l'intérieur du tableau de publication et l'imprime. Si l'API est mise à jour pour ajouter un seul élément supplémentaire à ce tableau de publication, le code de l'application va se casser car il imprimera un nouveau champ qu'il ne devrait probablement pas. Si l'ordre des éléments dans le tableau de publication renvoyé par l'API change, cela cassera également le code de l'application. Donc, retourner un tableau crée toutes sortes de dépendances possibles qu'un objet ne créerait pas.
Un objet peut contenir des informations qui lui permettront de vous fournir des fonctionnalités utiles. Un objet de publication, par exemple, pourrait être suffisamment intelligent pour renvoyer les messages précédents ou suivants. Un tableau ne pourrait jamais faire cela pour vous.
Tous les avantages des objets mentionnés ci-dessus contribuent à créer un système plus flexible.
count()ouarray_*()fonctionner sur eux (au moins en ce qui concerne le stockage / le retour des données key => value). Personne ne semble le mentionner, ou est-ce que je manque quelque chose?