at0m1x
@at0m1x

Сериализация свойств объекта с помощью __sleep()?

В документации по PHP написано:

Функция serialize() проверяет, присутствует ли в вашем классе метод с "магическим" именем __sleep(). Если это так, то этот метод выполняется прежде любой операции сериализации. Он может очистить объект и предполагается, что будет возвращен массив с именами всех переменных объекта, который должен быть сериализован. Если метод ничего не возвращает кроме NULL, то это значит, что объект сериализован и выдается предупреждение E_NOTICE.


Нужно сериализовать не все свойства объекта а только некоторые из них:

class Test {
  public $var1;

  public $var2;

  public function __sleep() {
    return array(
      'var1',
        );
  }
}

$test = new Test();
$serialized = serialize($test);

var_dump($serialized);

$unserialized = unserialize($serialized);

var_dump($unserialized);


Результат выполнения этого кода следующий:

string 'O:4:"Test":1:{s:4:"var1";N;}' (length=28)

object(Test)[2]
public 'var1' => null
public 'var2' => null


Как так получается что при выводе сериализованного объекта видно что действительно в нем только одно свойство. А при десериализации у объекта снова все свойства?
  • Вопрос задан
  • 2444 просмотра
Пригласить эксперта
Ответы на вопрос 1
toxa82
@toxa82
Потому что в классе объявлено 2 свойства.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы