Méthode __set_state

La méthode __set_state est statique et est appelée automatiquement lors de l'utilisation de la fonction var_export sur un objet. Elle doit retourner une nouvelle instance de la classe avec les propriétés restaurées. Cette méthode est utile pour la sérialisation et la déserialisation d'objets.

Syntaxe

phppublic static function __set_state(array $properties): object

Exemple

Créons une classe et implémentons la méthode __set_state :

php<?php
class MyClass {
  public $prop1;
  public $prop2;
  
  public function __construct($val1, $val2) {
    $this->prop1 = $val1;
    $this->prop2 = $val2;
  }
  
  public static function __set_state($array) {
    return new self($array['prop1'], $array['prop2']);
  }
}

$obj = new MyClass('a', 'b');
$exported = var_export($obj, true);
eval('$newObj = ' . $exported . ';');

var_dump($newObj);
?>

Résultat de l'exécution du code :

phpobject(MyClass)#2 (2) {
  ["prop1"]=> string(1) "a"
  ["prop2"]=> string(1) "b"
}

Exemple

Utilisation de __set_state avec des propriétés privées :

php<?php
class PrivateClass {
  private $secret;
  
  public function __construct($value) {
    $this->secret = $value;
  }
  
  public static function __set_state($array) {
    $obj = new self($array['secret']);
    return $obj;
  }
}

$privateObj = new PrivateClass('12345');
$exported = var_export($privateObj, true);
eval('$newPrivateObj = ' . $exported . ';');

var_dump($newPrivateObj);
?>

Résultat de l'exécution du code :

phpobject(PrivateClass)#2 (1) {
  ["secret":"PrivateClass":private]=> string(5) "12345"
}

Voir aussi

  • la fonction var_export,
    qui exporte une variable en chaîne de caractères
  • la méthode __sleep,
    qui est appelée avant la sérialisation d'un objet
  • la méthode __wakeup,
    qui est appelée lors de la déserialisation d'un objet