(PHP 5 >= 5.1.0, PHP 7, PHP 8)
Interface permettant de personnaliser la sérialisation.
Les classes implémentant cette interface ne supportent plus __sleep() et __wakeup(). La méthode de sérialisation est appelée chaque fois qu'une instance doit être sérialisée. Elle n'appelle pas __destruct() et ne produit aucun autre effet de bord, sauf si cela est codé dans la méthode. Lorsque les données sont désérialisées, la classe est connue et la méthode unserialize() appropriée est appelée comme constructeur au lieu d'appeler __construct(). S'il est nécessaire d'appeler le constructeur standard, il est possible de le faire dans la méthode.
À partir de PHP 8.1.0, une classe qui implémente Serializable sans aussi implémenter __serialize() et __unserialize() génèrera une notice de dépréciation.
Exemple #1 Exemple simple
<?php
class obj implements Serializable {
private $data;
public function __construct() {
$this->data = "Mes données privées";
}
public function serialize() {
return serialize($this->data);
}
public function unserialize($data) {
$this->data = unserialize($data);
}
public function getData() {
return $this->data;
}
}
$obj = new obj;
$ser = serialize($obj);
var_dump($ser);
$newobj = unserialize($ser);
var_dump($newobj->getData());
?>Résultat de l'exemple ci-dessus est similaire à :
Deprecated: obj implements the Serializable interface, which is deprecated. Implement __serialize() and __unserialize() instead (or in addition, if support for old PHP versions is necessary) in script on line 2
string(44) "C:3:"obj":29:{s:21:"Mes données privées";}"
string(21) "Mes données privées"