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

phppublic 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<?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 :

php'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<?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 :

php'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