__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

phppublic static function __set_state(array $properties): object

Örnek

Bir sınıf oluşturalım ve içinde __set_state metodunu uygulayalım:

php<?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:

phpobject(MyClass)#2 (2) {
  ["prop1"]=> string(1) "a"
  ["prop2"]=> string(1) "b"
}

Örnek

__set_state metodunun özel (private) özelliklerle kullanımı:

php<?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:

phpobject(PrivateClass)#2 (1) {
  ["secret":"PrivateClass":private]=> string(5) "12345"
}

Ayrıca Bakınız

  • var_export fonksiyonu,
    bir değişkeni string olarak dışa aktarır
  • __sleep metodu,
    nesne serileştirilmeden önce çağrılır
  • __wakeup metodu,
    nesne serileştirmesi çözülürken çağrılır