__set_state Metodu
__set_state metodu statiktir ve var_export fonksiyonu bir nesne üzerinde kullanıldığında otomatik olarak çağrılır. Geri yüklenmiş özelliklere sahip yeni bir sınıf örneği döndürmelidir. Bu metod nesnelerin serileştirilmesi ve serileştirmenin çözülmesi için kullanışlıdır.
Sözdizimi
public static function __set_state(array $properties): object
Örnek
Bir sınıf oluşturalım ve içinde __set_state metodunu uygulayalım:
<?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);
?>
Kodun çalıştırılmasının sonucu:
object(MyClass)#2 (2) {
["prop1"]=> string(1) "a"
["prop2"]=> string(1) "b"
}
Örnek
__set_state metodunun özel (private) özelliklerle kullanımı:
<?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);
?>
Kodun çalıştırılmasının sonucu:
object(PrivateClass)#2 (1) {
["secret":"PrivateClass":private]=> string(5) "12345"
}
Ayrıca Bakınız
-
var_exportfonksiyonu,
bir değişkeni string olarak dışa aktarır -
__sleepmetodu,
nesne serileştirilmeden önce çağrılır -
__wakeupmetodu,
nesne serileştirmesi çözülürken çağrılır