24-12-2010, 02:25 PM
(Modification du message : 24-12-2010, 02:38 PM par Sephi-Chan.)
Hello,
Dans les jeux par navigateur, il arrive qu'on souhaiter stocker des informations sans structure particulière. Souvent, les développeurs débutants font ça en formatant les informations sous forme d'une chaîne de caractères, en utilisant une notation de leur cru, par exemple :
Puis après, ces développeurs disent : on va utiliser explode pour récupérer les informations !
En fait, c'est une bien mauvaise idée.
Cette façon de stocker des données sous forme d'une chaîne existe depuis longtemps. Ça s'appelle la sérialisation (aussi appelé marshalling) et il y a déjà des outils pour faire.
Parmi ces outils il y a JSON (http://json.org/), qui permet de représenter des données sous forme d'objet Javascript. L'avantage de JSON (par rapport à une sérialisation maison) est qu'il supporte les nombres, les chaînes, les valeurs null, les booléen, les tableaux et les hash (tableau associatif).
Par exemple, l'équivalent des informations données plus haut sous forme d'une chaîne pourrait être :
L'autre avantage de JSON, c'est que tous les langages savent le produire. Dans le cas de PHP, il y a même des fonctions natives (donc performantes) pour produire du JSON (retourné sous forme d'une chaîne de caractère). Exemple :
M'affiche à l'écran :
Et on peut très facilement faire l'inverse, transformer cette chaîne en un objet (de la classe StdClass) ou un tableau :
Nous donne :
Et tout ça, sans avoir à se soucier de la manière dont nous récupérons nos données ! Ça peut être des tableaux imbriqués, des entiers, des true, des false, etc. Ça fonctionne !
Voilà pourquoi je vous suggère d'oublier explode et d'utiliser json_encode/json_decode.
Pour compléter ça, il faudrait fournir des cas d'utilisations de telles données : il ne faut pas utiliser cette technique pour tout et n'importe quoi. Souvent, il est plus pertinent d'utiliser des colonnes appropriées dans la table ou une relation many-to-many.
Sephi-Chan
Dans les jeux par navigateur, il arrive qu'on souhaiter stocker des informations sans structure particulière. Souvent, les développeurs débutants font ça en formatant les informations sous forme d'une chaîne de caractères, en utilisant une notation de leur cru, par exemple :
attaque:10|defense:10|vie:100
Puis après, ces développeurs disent : on va utiliser explode pour récupérer les informations !
En fait, c'est une bien mauvaise idée.
Cette façon de stocker des données sous forme d'une chaîne existe depuis longtemps. Ça s'appelle la sérialisation (aussi appelé marshalling) et il y a déjà des outils pour faire.
Parmi ces outils il y a JSON (http://json.org/), qui permet de représenter des données sous forme d'objet Javascript. L'avantage de JSON (par rapport à une sérialisation maison) est qu'il supporte les nombres, les chaînes, les valeurs null, les booléen, les tableaux et les hash (tableau associatif).
Par exemple, l'équivalent des informations données plus haut sous forme d'une chaîne pourrait être :
{
"attaque": 10,
"defense": 10,
"vie": 100
}
L'autre avantage de JSON, c'est que tous les langages savent le produire. Dans le cas de PHP, il y a même des fonctions natives (donc performantes) pour produire du JSON (retourné sous forme d'une chaîne de caractère). Exemple :
$attributes = array(
'attaque' => 10,
'defense' => 10,
'vie' => 100
);
echo json_encode($attributes);
M'affiche à l'écran :
{"attaque":10,"defense":10,"vie":100}
Et on peut très facilement faire l'inverse, transformer cette chaîne en un objet (de la classe StdClass) ou un tableau :
$attributes_as_json_string = '{"attaque":10,"defense":10,"vie":100}';
$attributes = json_decode($attributes_as_json_string, true); // true pour obtenir un tableau au lieu d'un objet.
print_r($attributes);
Nous donne :
Array
(
[attaque] => 10
[defense] => 10
[vie] => 100
)
Et tout ça, sans avoir à se soucier de la manière dont nous récupérons nos données ! Ça peut être des tableaux imbriqués, des entiers, des true, des false, etc. Ça fonctionne !
Voilà pourquoi je vous suggère d'oublier explode et d'utiliser json_encode/json_decode.
Pour compléter ça, il faudrait fournir des cas d'utilisations de telles données : il ne faut pas utiliser cette technique pour tout et n'importe quoi. Souvent, il est plus pertinent d'utiliser des colonnes appropriées dans la table ou une relation many-to-many.
Sephi-Chan