(PHP 4, PHP 5, PHP 7, PHP 8)
serialize — Génère une représentation stockable d'une valeur
Description
serialize(mixed
$value
): string
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 linéarisée et retrouver une
valeur PHP, utilisez unserialize().
Liste de paramètres
-
value
-
La valeur à linéariser. serialize() accepte
tous les types sauf les ressources ressource et certains objets (voir note ci-dessous).
Vous pouvez même linéariser 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 linéarisation d'un objet, PHP tentera d'appeler les fonctions
membres __serialize() ou
__sleep() avant de linéariser.
Cela permet à l'objet de faire un dernier nettoyage, etc.
avant d'être linéarisé. 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 cotés.
Valeurs de retour
Retourne une chaîne de caractères contenant une représentation sous forme de flux d'octets
qui peut être stocker 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
linéarisé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 linéarisée de manière fiable.
Il existe des exceptions historiques à cette règle, où des objets internes peuvent être
linéarisé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() linéarise des objets,
l'antislash de fin n'est pas inclus dans l'espace de nom du nom de la classe
et ce, pour un maximum de compatibilité.
Voir aussi
- unserialize() - Crée une variable PHP à partir d'une valeur linéarisée
- var_export() - Retourne le code PHP utilisé pour générer une variable
- json_encode() - Retourne la représentation JSON d'une valeur
- Serializing Objects
- __sleep()
- __wakeup()
- __serialize()
- __unserialize()