В документации по 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
Как так получается что при выводе сериализованного объекта видно что действительно в нем только одно свойство. А при десериализации у объекта снова все свойства?