PHP è un linguaggio di paradigmi misto, che consente di utilizzare e restituire tipi di dati non oggetto, come gli array. Faccio una domanda per cercare di chiarire alcune linee guida per la selezione di array vs oggetti al momento di decidere quale costrutto di programmazione utilizzare in una particolare situazione.
Questa è davvero una domanda sui modi per codificare i dati usando i costrutti del linguaggio PHP e quando è più probabile che un modo venga scelto su un altro per scopi di trasmissione dati (ad esempio architettura orientata ai servizi o servizi web).
Esempio
Supponiamo di avere un tipo di oggetto composto da {costo, nome, numero_parte, numero_articolo}. Il tuo programma richiede la visualizzazione di diversi di questi tipi di elementi, in cui decidi di utilizzare un array come contenitore esterno per contenere ciascuno dei tipi di elementi. [Puoi usare anche ArrayObject
di PHP per il paradigma OO, ma la mia domanda non riguarda quella (esterna) matrice]. La mia domanda è su come codificare i dati del tipo di oggetto e su quale paradigma utilizzare. PHP ti permette di usare PHP Native Arrays
o PHP Objects
.
Posso codificare questi dati, in due modi qui, in questo modo:
//PHP's associative arrays:
$ret = array(
0 => array(
'cost' => 10.00,
'name' => 'item1',
'part_number' => 'zyz-100',
'item_count' => 15
),
1 => array(
'cost' => 34.00,
'name' => 'item2',
'part_number' => 'abc-230',
'item_count' => 42
),
);
vs
//here ItemType is encapsulated into an object
$ret = array(
0 => new ItemType(10.00, 'item1', 'zyz-100', 15),
1 => new ItemType(34.00, 'item2', 'abc-230', 42),
);
class ItemType
{
private $price;
private $name;
private $partNumber;
private $itemCount;
function __construct($price, $name, $partNumber, $itemCount) {..}
}
Cosa sto pensando
La codifica di array è leggera e più pronta per JSON, ma può essere più facile rovinarla. Misspell una delle chiavi di array associativo e potresti avere un errore che è più difficile da individuare. Ma è anche più facile cambiare su un capriccio. Supponiamo che non voglia più memorizzare item_count
, posso utilizzare qualsiasi software di elaborazione del testo per rimuovere facilmente tutte le istanze di item_count
nell'array e quindi aggiornare altre funzioni che lo utilizzano di conseguenza. Potrebbe essere un processo più noioso, ma è semplice.
La codifica orientata agli oggetti richiama le strutture del linguaggio IDE e PHP e rende più facile rilevare eventuali errori in anticipo, ma è più difficile da programmare e codificare in primo luogo. Dico più strong, perché devi pensare un po 'ai tuoi oggetti, pensare al futuro, e la codifica OO richiede un carico cognitivo un po' più alto rispetto alla tipizzazione delle strutture di array. Detto questo, una volta che è stato codificato, alcune modifiche potrebbero essere più facili da implementare, in un certo senso, che la rimozione di item_count
, ad esempio, richiederà la modifica di meno righe di codice. Ma i cambiamenti stessi possono ancora richiedere un carico cognitivo più elevato rispetto al metodo dell'array, poiché sono coinvolte strutture OO di livello superiore.
Domanda
In alcuni casi è chiaro, come i casi in cui dovrò eseguire manipolazioni sui dati. Ma in alcuni casi, dove ho bisogno di archiviare solo poche righe di dati di tipo "Articolo tipo", non ho linee guida o considerazioni chiare su cui basarsi per decidere se utilizzare gli array o se costruire oggetti. Sembra che posso solo lanciare una moneta e sceglierne una. È questo il caso qui?