web-dev-qa-db-fra.com

Qu'est-ce que la sérialisation des données?

Tout d'abord, je ne pouvais pas en obtenir une définition claire à partir de la fonction WikiPedia ou même de sérialiser dans le manuel PHP. I besoin de connaître certains cas, nous avons besoin du terme sérialisation et comment les choses se passent sans lui? Dans un autre mot, où vous devez avoir besoin de sérialisation et sans cela votre code manquera une fonctionnalité importante.

31
user1350140

Qu'est-ce que la sérialisation?

La sérialisation est un objet codant dans une autre langue. Par exemple, vous avez un tableau en PHP comme ceci:

$array = array("a" => 1, "b" => 2, "c" => array("a" => 1, "b" => 2));

Et puis vous voulez le stocker dans un fichier ou l'envoyer à une autre application.

Il existe plusieurs choix de langues, mais l'idée est la même: ce tableau doit être codé (ou traduit) en texte ou en octets, qui peut être écrit dans un fichier ou envoyé via le réseau. Par exemple, si vous

$data = serialize($array);

vous obtiendrez ceci:

a:3:{s:1:"a";i:1;s:1:"b";i:2;s:1:"c";a:2:{s:1:"a";i:1;s:1:"b";i:2;}}

Il s'agit du format de sérialisation particulier de PHP que PHP comprend et il fonctionne inversement, vous pouvez donc l'utiliser pour désérialiser des objets. Par exemple, vous avez stocké un tableau dans un fichier et vous souhaitez le renvoyer dans votre code:

$array = unserialize($data);

Mais vous pouvez choisir un autre format de sérialisation, par exemple, JSON.

$json = json_encode($array);

vous donnera ceci:

{"a":1,"b":2,"c":{"a":1,"b":2}}

Résultat non seulement facilement enregistré, lu par l'œil humain ou envoyé via le réseau, mais compréhensible par presque tous les autres langages (Javascript, Java, C #, C++ .....)

Conclusion La sérialisation est la traduction d'objets dans une autre langue, au cas où vous souhaiteriez stocker ou partager des données.

Y a-t-il des situations où vous ne pouvez rien faire mais le sérialiser?

Non. Mais la sérialisation facilite généralement les choses.

Les formats JSON et PHP sont-ils les seuls formats possibles? Non, non, non et encore une fois non. Il existe de nombreux formats.

  • XML qui a des successeurs comme SOAP, WSDL, etc. (ceux-ci ont un but particulier)
  • Octets
  • ...
  • ...
  • ...
  • Vos propres formats (vous pouvez créer votre propre format pour la sérialisation et l'utiliser, mais c'est une grande chose à faire et cela ne vaut pas la peine, la plupart du temps)

J'espère que j'ai aidé!

77
Dovydas Navickas

La sérialisation est le processus de conversion d'un objet en mémoire vers un autre format qui pourrait être utilisé pour être stocké dans un fichier ou envoyé sur le réseau. La désérialisation est le processus inverse, ce qui signifie que l'instance d'objet réelle est restaurée à partir de la représentation sérialisée donnée de l'objet. Ceci est très utile lors de la communication entre différents systèmes.

Le format de sérialisation peut être soit interopérable ou non interopérable . Les formats interopérables (tels que JSON, XML, ...) permettent de sérialiser un objet en utilisant une plate-forme donnée et de le désérialiser en utilisant une plate-forme différente. Par exemple, avec JSON, vous pouvez utiliser javascript pour sérialiser l'objet et l'envoyer sur le réseau à un script PHP qui désérialise l'objet et l'utilise).

La fonction serialize() PHP utilise un format non interopérable. Cela signifie que seul PHP peut être utilisé pour à la fois sérialiser et désérialiser l'objet.

Vous pouvez utiliser les fonctions json_encode et json_decode() pour sérialiser/désérialiser PHP objets en utilisant le format interopérable JSON.

16
Darin Dimitrov

La sérialisation est le processus de transformation de données (par exemple des variables) en une représentation telle qu'une chaîne, qui peut facilement être écrite et relue, par exemple à partir d'un fichier ou de la base de données.

Cas d'utilisation? Il y en a beaucoup, mais généralement cela tourne autour de l'idée de prendre un tableau ou un objet imbriqué complexe et de le transformer en une simple chaîne qui peut être enregistrée et lue plus tard pour récupérer la même structure. Par exemple, à condition d'avoir en php:

$blub = array();
$blub['a'] = 1;
$blub['a']['b'] = 4;
$blub['b'] = 27;
$blub['b']['b'] = 46;

Au lieu de parcourir chaque membre du tableau individuellement et de l'écrire, on pourrait simplement:

$dataString = serialize($blub);

Et le tableau sérialisé est prêt à être écrit n'importe où sous la forme d'une simple chaîne, de telle manière que récupérer à nouveau cette chaîne et faire unerialize () dessus vous obtienne exactement la même structure de tableau que vous aviez auparavant. Oui, c'est vraiment aussi simple que cela.

4
Mahn

J'ai besoin de connaître certains cas, nous avons besoin du terme sérialisation et comment les choses se passent sans?

La sérialisation peut devenir pratique si vous devez stocker des structures complètes (comme une facture avec toutes les données associées comme l'adresse du client, l'adresse de l'expéditeur, les positions des produits, les calculs fiscaux, etc.) qui ne sont valables qu'à un certain moment.

Toutes ces données changeront à l'avenir, de nouvelles réglementations fiscales pourraient survenir, l'adresse d'un client change, les produits deviennent obsolètes. Mais la facture doit toujours être valide et stockée.

Cela est possible avec la sérialisation. Comme un instantané. Les objets en mémoire sont sérialisés sous une forme binaire (souvent comme en PHP) qui peut être simplement stockée. Il peut être ramené à vivre plus tard (et dans un contexte différent). Comme avec cet exemple de facture: dans dix ans, les données peuvent toujours être lues et l'objet facture est le même qu'il était dix ans plus tôt.

Dans un autre Word, où vous devez avoir besoin de la sérialisation et sans lui, votre code manquera une fonctionnalité importante.

C'était un exemple. Ce n'est pas que vous en ayez toujours besoin, mais si les choses deviennent plus complexes, la sérialisation peut être utile.

3
hakre

Puisque vous l'avez tagué avec javascript, un type de sérialisation peut être la sérialisation de formulaire.

Voici les références pour les équivalents jQuery et prototype.JS .

Ce qu'ils font essentiellement sérialiser les valeurs d'entrée du formulaire en paires nom-valeur séparées par des virgules .

Considérant donc une utilisation réelle ..

$.ajax({
   url : 'insert.php?a=10,b=15' //values serialized via .serialize()
   type: 'GET'
});

Et vous feriez probablement $GET["a"] pour récupérer ces valeurs, je ne connais pas bien PHP cependant.

1
Robin Maben