360 of 410 menu

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
bydeenesfrptru