Methode __set_state
De methode __set_state is statisch en wordt automatisch aangeroepen wanneer de functie var_export op een object wordt gebruikt. Het moet een nieuwe instantie van de klasse teruggeven met herstelde eigenschappen. Deze methode is nuttig voor het serialiseren en deserialiseren van objecten.
Syntaxis
public static function __set_state(array $properties): object
Voorbeeld
Laten we een klasse maken en daarin de methode __set_state implementeren:
<?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);
?>
Resultaat van het uitvoeren van de code:
object(MyClass)#2 (2) {
["prop1"]=> string(1) "a"
["prop2"]=> string(1) "b"
}
Voorbeeld
Het gebruik van __set_state met private eigenschappen:
<?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);
?>
Resultaat van het uitvoeren van de code:
object(PrivateClass)#2 (1) {
["secret":"PrivateClass":private]=> string(5) "12345"
}
Zie ook
-
de functie
var_export,
die een variabele exporteert naar een string -
de methode
__sleep,
die wordt aangeroepen vóór serialisatie van een object -
de methode
__wakeup,
die wordt aangeroepen bij deserialisatie van een object