the php manual states:
It can clean up the object and is supposed to return an array with the names of all variables of that object that should be serialized.
i understand this as, if a had a class. Like this:
<?php
class Foo {
public $bar = 'bar';
public $baz = 'baz';
public function __sleep() {
return array('bar');
}
}
$obj = new Foo();
$serialized = serialize($obj);
$unserialized = unserialize($serialized);
var_dump($unserialized);
?>
it would only serialize the object and the property $bar? Like this:
object(Foo)[2]
public 'bar' => string 'bar' (length=3)
but it returns:
object(Foo)[2]
public 'bar' => string 'bar' (length=3)
public 'baz' => string 'baz' (length=3)
Have i interpreted it wrong? Or am i doing it wrong or what?
You're defining an initial value of 'baz' for the $baz property, so when you unserialize, PHP recreated baz with that default value despite the fact that it's not part of the serialized object. If you changed the value of baz before serializing, then serialize/unserialize, it will reset baz to that default value of 'baz', rather than to the value you had changed it to.
Unserializing creates a new instance of the object, and since your definition of the class initializes the attribute, you're getting a default value for it. Try this:
Edit: Alternatively, you can vardump($serialized) and see that there is no baz in it.