Using the Sleep and Wakeup Functions to Serialize Objects in PHP - A quick look at how to define self-saving objects (
Page 2 of 4 )
A good place to start explaining some advanced concepts, such as the use of the “__sleep()” and “__wakeup()” PHP magic functions, and to introduce object persistence, is with precisely listing the definition for the example “ObjectSaver” class that you learned in the previous tutorial.
As you’ll certainly recall, this class was capable of saving and restoring itself via its own methods, which implies that any objects spawned from it can be considered self-saving objects.
Assuming that self-saving objects are pretty familiar to you, here is the corresponding signature of the “ObjectSaver” class, as I defined it originally in the first article. Please have a look:
class ObjectSaver{
var $objectFile;
function ObjectSaver($objectFile='defaultDir/objects.txt'){
$this->objectFile=$objectFile;
$this->save();
}
// save serialized object to file
function save(){
if(!$fp=fopen($this->objectFile,'w')){
trigger_error('Error opening object
file',E_USER_ERROR);
}
if(!fwrite($fp,serialize($this))){
trigger_error('Error writing data to object
file',E_USER_ERROR);
}
fclose($fp);
}
// fetch object from file
function fetch(){
if(!$obj=unserialize(file_get_contents($this-
>objectFile))){
trigger_error('Error fetching object from
file',E_USER_ERROR);
}
return $obj;
}
// display message
function displayMessage(){
return 'This is an object that saves and retrieves itself
via its methods!';
}
}
As you learned before, the above class initially exposed the “save()” and “fetch()” methods, which were handy for serializing and unserializing itself, and used a simple text file for storing its status. Naturally, this behavior can be modified easily, in order to use cookies or even a database table for saving different instances of the class.
Additionally, I added to the class the “displayMessage()” method, which can be used for showing a trivial message, in this way demonstrating how an object spawned from this class is capable of restoring itself. With reference to this capability, the below example clearly shows how to use an object which has been instanced from the “ObjectSaver” class:
$objSaver=&new ObjectSaver();
$newObj=$objSaver->fetch();
echo $newObj->displayMessage();
All right, after exemplifying the usage of the above class, I’m going to employ it to demonstrate how to use the “__sleep()” and “__wakeup()” PHP magic functions, in order to create objects that persist across different HTTP requests.
To learn how this will be achieved, please click on the link below and keep reading.