Méthode __serialize
La méthode magique __serialize est appelée lors de la sérialisation d'un objet
par la fonction serialize. Elle doit retourner un tableau de données qui
seront sérialisées. Cette méthode est apparue dans PHP 7.4 comme une alternative
à la méthode __sleep avec un contrôle plus flexible du processus de sérialisation.
Syntaxe
public function __serialize(): array
Exemple
Créons une classe avec la méthode __serialize qui définira
quelles propriétés de l'objet doivent être sérialisées :
<?php
class User {
public $name;
private $password;
public $email;
public function __construct($name, $password, $email) {
$this->name = $name;
$this->password = $password;
$this->email = $email;
}
public function __serialize(): array {
return [
'name' => $this->name,
'email' => $this->email,
'hash' => md5($this->password)
];
}
}
$user = new User('John', 'secret123', 'john@example.com');
echo serialize($user);
?>
Résultat de l'exécution du code :
'O:4:"User":3:{s:4:"name";s:4:"John";s:5:"email";s:15:"john@example.com";s:4:"hash";s:32:"e5e9fa1ba31ecd1ae84f75caaa474f3a";}'
Exemple
Démontrons la différence entre __serialize et __sleep :
<?php
class Product {
public $id;
protected $price;
private $discount;
public function __sleep() {
return ['id', 'price'];
}
public function __serialize(): array {
return [
'id' => $this->id,
'price' => $this->price * (1 - $this->discount)
];
}
}
$product = new Product();
$product->id = 100;
$product->price = 50;
$product->discount = 0.1;
echo "Sleep: " . serialize($product) . "\n";
echo "Serialize: " . serialize($product);
?>
Résultat de l'exécution du code :
'Sleep: O:7:"Product":2:{s:2:"id";i:100;s:5:"price";i:50;}'
'Serialize: O:7:"Product":2:{s:2:"id";i:100;s:5:"price";d:45;}'
Voir aussi
-
la fonction
serialize,
qui convertit une valeur en une chaîne stockable