Methode __set_state
Die Methode __set_state
ist statisch und wird automatisch aufgerufen, wenn die Funktion var_export
auf ein Objekt angewendet wird. Sie muss eine neue Instanz der Klasse mit wiederhergestellten Eigenschaften zurückgeben. Diese Methode ist nützlich für die Serialisierung und Deserialisierung von Objekten.
Syntax
public static function __set_state(array $properties): object
Beispiel
Erstellen wir eine Klasse und implementieren darin die Methode __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);
?>
Ergebnis der Codeausführung:
object(MyClass)#2 (2) {
["prop1"]=> string(1) "a"
["prop2"]=> string(1) "b"
}
Beispiel
Verwendung von __set_state
mit privaten Eigenschaften:
<?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);
?>
Ergebnis der Codeausführung:
object(PrivateClass)#2 (1) {
["secret":"PrivateClass":private]=> string(5) "12345"
}
Siehe auch
-
die Funktion
var_export
,
die eine Variable in einen String exportiert -
die Methode
__sleep
,
die vor der Serialisierung eines Objekts aufgerufen wird -
die Methode
__wakeup
,
die bei der Deserialisierung eines Objekts aufgerufen wird