CHAPTER 9 ■ INTRODUCTION TO SPL^135Listing 9-8 generates the following output:The new value is 5Serialization
The SPL’s Serializable interface provides for some advanced serialization scenarios. The non-
SPL serialization magic method’s __sleep and __wakeup have a couple of issues that are addressed
by the SPL interface.
The magic methods cannot serialize private variables from a base class. The __sleep func-
tion you implement must return an array of variable names to include in the serialized output.
Because of where the serialization occurs, private members of the base class are restricted.
Serializable lifts this restriction by allowing you to call serialize() on the parent class, returning
the serialized private members of that class.
Listing 9-9 demonstrates a scenario that magic methods cannot handle.Listing 9-9. Magic Method Serializationerror_reporting(E_ALL); //Ensure notices showclass Base {
private $baseVar;public function __construct() {
$this->baseVar = 'foo';
}}class Extender extends Base {
private $extenderVar;public function __construct() {
parent::__construct();
$this->extenderVar = 'bar';
}public function __sleep() {
return array('extenderVar', 'baseVar');
}
}$instance = new Extender();
$serialized = serialize($instance);
echo $serialized. "\n";
$restored = unserialize($serialized);McArthur_819-9C09.fm Page 135 Thursday, February 28, 2008 1:21 PM