Les tableaux en PHP sont des
hashmaps. Les objets sont des instances de classes. Une classe est une zone mémoire à laquelle sont rattachés des méthodes qui travaillent sur des données qui appartiennent elles-mêmes à différentes zones mémoires (statique ou dynamique).
Si tu connais un peu le C, une classe est strictement équivalente à une structure. Un bête
record qui permet d'associer des données à des symboles (noms). En PHP, on a la classe
StdClass qui permettrait d'en faire autant, mais l'habitude est plutôt d'utiliser les tableaux pour ça. L'impact mémoire est différent, tout comme la vitesse d'exécution. Il faut prendre ça en considération lorsque l'on manipule des millions de données, car c'est uniquement dans ce cas que l'on verra une différence (faire $array['foo'] ou $object->foo est différent, car 'foo' est une chaîne qui va être transformée en hash pour trouver la valeur associée — notons que les chaînes sont représentées par des
buffers en C —, alors que foo dans $object->foo est un symbole, donc il faut parcourir la table des symboles). Mais (!), PHP n'est pas conçu pour traiter des millions de données, son exécution est linéaire (contrairement à d'autres machines virtuelles qui utilisent des astuces, comme
JIT, pour accélérer les codes exécutés plusieurs fois).
Bref, utilises les tableaux, c'est franchement plus simple dans ton cas et
StdClass n'apportera rien de plus.
Cette
StdClass a été créée comme
fallback pour plusieurs fonctions PHP. Par exemple une lecture de base de données pour produire un tableau ou un objet. Les propriétés ne sont pas les mêmes : un tableau est très souvent copié lors d'un passage en argument d'une fonction, alors que pour un objet, c'est toujours sa référence qui est passée, donc on ne copie pas l'objet mais sa référence. Ça peut-être intéressant.
Tu parles aussi de
ArrayObject. C'est une classe proposée par la
SPL. C'est une classe qui se comporte comme un tableau grâce aux interfaces
ArrayAccess,
Countable etc. Sauf que l'objectif n'est pas de stocker de bêtes chaînes ou entiers mais des tableaux, et en grande quantité. (Note : si on veut un itérateur sur un tableau, il est préférable d'utiliser
ArrayIterator plutôt que
ArrayObject).
Donc, pour reprendre mon bref : utilise les tableaux et ça ira tout bien. Réfléchis juste à ce que tu vas mettre dedans et comment tu vas l'agencer, ça fera tout le boulot niveau optimisation.
Ah oui, tu parlais de transformer les clés, d'échapper les guillemets simples, les espaces etc. Sache que tu peux écrires : $object->{"abc'def ghi"}, et ça fonctionnera tout bien.
Les tableaux en PHP sont des [url=https://fr.wikipedia.org/wiki/Hashmap][i]hashmaps[/i][/url]. Les objets sont des instances de classes. Une classe est une zone mémoire à laquelle sont rattachés des méthodes qui travaillent sur des données qui appartiennent elles-mêmes à différentes zones mémoires (statique ou dynamique).
Si tu connais un peu le C, une classe est strictement équivalente à une structure. Un bête [i]record[/i] qui permet d'associer des données à des symboles (noms). En PHP, on a la classe [i]StdClass[/i] qui permettrait d'en faire autant, mais l'habitude est plutôt d'utiliser les tableaux pour ça. L'impact mémoire est différent, tout comme la vitesse d'exécution. Il faut prendre ça en considération lorsque l'on manipule des millions de données, car c'est uniquement dans ce cas que l'on verra une différence (faire $array['foo'] ou $object->foo est différent, car 'foo' est une chaîne qui va être transformée en hash pour trouver la valeur associée — notons que les chaînes sont représentées par des [i]buffers[/i] en C —, alors que foo dans $object->foo est un symbole, donc il faut parcourir la table des symboles). Mais (!), PHP n'est pas conçu pour traiter des millions de données, son exécution est linéaire (contrairement à d'autres machines virtuelles qui utilisent des astuces, comme [url=https://fr.wikipedia.org/wiki/Compilation_%C3%A0_la_vol%C3%A9e]JIT[/url], pour accélérer les codes exécutés plusieurs fois).
[b]Bref[/b], utilises les tableaux, c'est franchement plus simple dans ton cas et [i]StdClass[/i] n'apportera rien de plus.
Cette [i]StdClass[/i] a été créée comme [i]fallback[/i] pour plusieurs fonctions PHP. Par exemple une lecture de base de données pour produire un tableau ou un objet. Les propriétés ne sont pas les mêmes : un tableau est très souvent copié lors d'un passage en argument d'une fonction, alors que pour un objet, c'est toujours sa référence qui est passée, donc on ne copie pas l'objet mais sa référence. Ça peut-être intéressant.
Tu parles aussi de [i]ArrayObject[/i]. C'est une classe proposée par la [url=http://php.net/spl]SPL[/url]. C'est une classe qui se comporte comme un tableau grâce aux interfaces [i]ArrayAccess[/i], [i]Countable[/i] etc. Sauf que l'objectif n'est pas de stocker de bêtes chaînes ou entiers mais des tableaux, et en grande quantité. (Note : si on veut un itérateur sur un tableau, il est préférable d'utiliser [i]ArrayIterator[/i] plutôt que [i]ArrayObject[/i]).
Donc, pour reprendre mon bref : utilise les tableaux et ça ira tout bien. Réfléchis juste à ce que tu vas mettre dedans et comment tu vas l'agencer, ça fera tout le boulot niveau optimisation.
Ah oui, tu parlais de transformer les clés, d'échapper les guillemets simples, les espaces etc. Sache que tu peux écrires : $object->{"abc'def ghi"}, et ça fonctionnera tout bien.