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
public static function __set_state(array $properties): object
Exemple
Créons une classe et implémentons la méthode __set_state :
<?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 :
object(MyClass)#2 (2) {
["prop1"]=> string(1) "a"
["prop2"]=> string(1) "b"
}
Exemple
Utilisation de __set_state avec des propriétés privées :
<?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 :
object(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