Questo probabilmente non è qualcosa che capirai a fondo fino a quando non avrai lavorato a un grande progetto software per diversi anni. Molte nuove major di informatica ti daranno una risposta con tutte le parole giuste (incapsulamento, funzionalità con i dati e manutenibilità) ma pochi capiranno davvero perché tutta quella roba è buona da avere.
Esaminiamo alcuni esempi.
- Se sono stati restituiti array, allora o tutti i valori devono essere calcolati in anticipo o devono essere restituiti molti piccoli valori con cui è possibile creare i valori più complessi.
Pensa a un metodo API che restituisce un elenco di post di WordPress. Questi post hanno tutti autori, gli autori hanno nomi, indirizzi e-mail, forse anche profili con le loro biografie.
Se stai restituendo tutti i post in un array, dovrai limitarti a restituire un array di ID post:
[233, 41, 204, 111]
o restituendo un enorme array che assomiglia a qualcosa di simile:
[ title: 'somePost', body: 'blah blah', 'author': ['name': 'billy', 'email': 'bill@bill.com', 'profile': ['interests': ['interest1', 'interest2', ...], 'bio': 'info...']] ]
[id: '2', .....]]
Il primo caso di restituzione di un elenco di ID non è molto utile perché in tal caso è necessario effettuare una chiamata API per ciascun ID per ottenere alcune informazioni su quel post.
Il secondo caso raccoglierà molte più informazioni di quelle necessarie il 90% delle volte e farà molto più lavoro (specialmente se uno di questi campi è molto complicato da costruire).
Un oggetto d'altra parte può fornirti l'accesso a tutte le informazioni di cui hai bisogno, ma non le hai ancora estratte. La determinazione dei valori dei campi può essere eseguita pigramente (cioè, quando il valore è necessario e non in anticipo) quando si utilizza un oggetto.
- Gli array espongono più dati e funzionalità del previsto
Torna all'esempio dell'enorme array restituito. Ora qualcuno potrebbe probabilmente costruire un'applicazione che itera su ogni valore all'interno dell'array di post e lo stampa. Se l'API viene aggiornata per aggiungere solo un elemento in più a quell'array di post, il codice dell'applicazione si interromperà poiché stamperà un nuovo campo che probabilmente non dovrebbe. Se l'ordine degli elementi nell'array di post restituito dall'API cambia, anche il codice dell'applicazione verrà interrotto. Quindi la restituzione di un array crea tutti i tipi di possibili dipendenze che un oggetto non creerebbe.
Un oggetto può contenere informazioni al suo interno che gli consentiranno di fornirti funzionalità utili. Un oggetto post, ad esempio, potrebbe essere abbastanza intelligente da restituire i post precedenti o successivi. Un array non potrebbe mai farlo per te.
Tutti i vantaggi degli oggetti sopra menzionati aiutano a creare un sistema più flessibile.
count()oarray_*()funzioni su di essi (almeno per quanto riguarda la memorizzazione / restituzione di dati chiave => valore). Nessuno sembra parlarne o mi sto perdendo qualcosa?