serialize
(PHP 4, PHP 5, PHP 7, PHP 8)
serialize — Génère une représentation stockable d'une valeur
Description
C'est une technique pratique pour stocker ou passer des valeurs PHP
entre scripts, sans perdre leur structure ni leur type.
Pour récupérer une variable sérialisée et retrouver une
valeur PHP, utiliser unserialize().
Liste de paramètres
value
-
La valeur à sérialiser. serialize() accepte
tous les types sauf les ressources resource et certains objets (voir note ci-dessous).
Il est même possible de sérialiser un tableau
qui contient des références sur lui-même. Les références cycliques dans des
tableaux/objets seront également stockées. Toutes les autres
références seront perdues.
Lors de la sérialisation d'un objet, PHP tentera d'appeler les fonctions
membres __serialize() ou
__sleep() avant de sérialiser.
Cela permet à l'objet de faire un dernier nettoyage, etc.
avant d'être sérialisé. De même, lorsque l'objet est restauré en
utilisant unserialize(), la fonction membre
__unserialize() ou
__wakeup() est appelée.
Note:
Les attributs privés d'un objet auront le nom de la classe préfixé
au nom de l'attribut ; les attributs protégés seront préfixés avec un
astérisque '*'. Ces valeurs préfixées ont des caractères nuls des
deux côtés.
Valeurs de retour
Retourne une chaîne de caractères contenant une représentation sous forme de flux d'octets
qui peut être stockée partout.
Il est à noter que c'est une chaîne binaire qui peut inclure des octets nuls,
et doit donc être stockée et gérée comme telle. Par exemple, la sortie de
serialize() doit généralement être stockée dans un champ
de type BLOB d'une base de données,
plutôt que dans un champ de type CHAR ou TEXT.
Exemples
Exemple #1 Exemple avec serialize()
<?php
// $session_data contient un tableau multidimensionnel , avec les
// informations de session de l'utilisateur courant. On utilise serialize()
// pour les stocker dans une base de données
$conn = odbc_connect("webdb", "php", "chicken");
$stmt = odbc_prepare($conn,
"UPDATE sessions SET data = ? WHERE id = ?");
$sqldata = array (serialize($session_data), $_SERVER['PHP_AUTH_USER']);
if (!odbc_execute($stmt, $sqldata)) {
$stmt = odbc_prepare($conn,
"INSERT INTO sessions (id, data) VALUES(?, ?)");
if (!odbc_execute($stmt, array_reverse($sqldata))) {
/* Un problème est survenu ! */
}
}
?>
Notes
Note:
Il est à noter que de nombreux objets internes de PHP ne peuvent pas être
sérialisés. Cependant, ceux qui le peuvent implémentent soit l'interface
Serializable soit les méthodes magiques
__serialize()/__unserialize()
ou __sleep()/__wakeup().
Si une classe interne ne remplit aucune de ces conditions, elle ne peut pas
être sérialisée de manière fiable.
Il existe des exceptions historiques à cette règle, où des objets internes peuvent être
sérialisés alors qu'ils n'implémentent pas l'interface ou n'exposent pas les méthodes
magiques prévues à cet effet.
Avertissement
Lorsque la fonction serialize() sérialise des objets,
l'antislash de fin n'est pas inclus dans l'espace de noms du nom de la classe
et ce, pour un maximum de compatibilité.