La Structure de Sérialisé PHP string
Je me demandais si quelqu'un pourrait m'indiquer une ressource où les détails d'un sérialisé php chaîne est documenté. Je voudrais un peu comme connaître le format/structure afin que je puisse écrire une fonction dans VB.NET pour sérialiser/désérialiser dos.
Merci!
- L'utilisation de JSON au lieu (
echo json_encode($arr);
). Le PHP natif sérialiseur est bizarre, à mon avis, et JSON est fortement soutenu et plus facile de travailler avec. VB JSON analyseur de classe. - Un commentaire inutile comme l'interlocuteur ne spécifie pas de cas d'utilisation qui indique un changement de format est-il possible ou même souhaitable. JSON est totalement orthogonal à la question posée. En outre, il existe de nombreux cas d'utilisation pour lesquels JSON est inappropriée d'un format de sérialisation, par ex. en cas de récursivité ou si la commande de la matrice de touches de questions. JSON ne doit pas être considéré comme un défaut d'aller au format sans la compréhension de ces restrictions.
Vous devez vous connecter pour publier un commentaire.
La structure de base est la suivante:
Types scalaires:
Les booléens sont sérialisés en tant que:
où
<i>
est un entier ayant une valeur de0
(false) ou1
(true).Entiers sont sérialisés en tant que:
où
<i>
est la valeur de l'entier.Les flotteurs sont sérialisés en tant que (avec
d
double sens):où
<f>
est la valeur flottante.Chaînes sont sérialisés en tant que:
où
<i>
est un nombre entier représentant la longueur de la chaîne de<s>
, et<s>
est la valeur de la chaîne.Types spéciaux:
null
est tout simplement sérialisé comme:Les types composés:
Les tableaux sont sérialisés en tant que:
où
<i>
est un entier représentant le nombre d'éléments dans le tableau, et<elements>
zéro ou plus sérialisé paires clé-valeur:où
<key>
représente un sérialisé type scalaire, et<value>
toute valeur qui est sérialisable.Les objets sont sérialisés comme:
où la première
<i>
est un nombre entier représentant la longueur de la chaîne de<s>
, et<s>
est le nom de classe entièrement qualifié (nom de la classe précédé de l'espace de nom complet). La deuxième<i>
est un entier représentant le nombre de propriétés de l'objet.<properties>
sont de zéro ou plus sérialisé paires nom /valeur:où
<name>
est sérialisé chaîne de caractères représentant le nom de la propriété, et<value>
toute valeur qui est sérialisable.Il y a un truc avec
<name>
si:<name>
est représenté commeoù
<i>
est un nombre entier représentant la longueur de la chaîne de<s>
. Mais les valeurs de<s>
diffère en fonction de la visibilité des propriétés:un. Avec public propriétés
<s>
est le nom simple de la propriété.b. Avec protégé propriétés, cependant,
<s>
est le nom simple de la propriété, précédées de\0*\0
— un astérix, entouré de deuxNUL
caractères (c'est à direchr(0)
).c. Et avec privé propriétés,
<s>
est le nom simple de la propriété, précédées de\0<s>\0
—<s>
, enfermé dans deuxNUL
personnages, où<s>
est le nom de classe entièrement qualifié.Il y a quelques autres cas, comme
R:<i>;
, qui représente les références, que je n'ai pas mentionné ici (parce que honnêtement, je n'ai pas compris le fonctionnement de celui-ci encore), mais ce devrait vous donner une vie décente idée à propos de PHP du mécanisme de sérialisation.J'ai trouvé cette page, à phpinternalsbook tout à fait complète. Il montre aussi l'alternative format de sérialisation pour les classes de mise en œuvre de
Serializable
de l'interface, ainsi que le sens deR
spécificateur de format.