PHP 5.6.0beta1 released

Las funciones mágicas __sleep y __wakeup

serialize() revisa si la clase tiene una función con el nombre mágico __sleep. Si es así, esa función es ejecutada antes de cualquier serialización. Puede limpiar el objeto y se supone que devuelva una matriz con los nombres de todas las variables de ese objeto que deberán ser serializadas. Si el método no devuelve nada, entonces NULL es serializado y E_NOTICE es emitida.

La intención de utilizar __sleep es asentar datos pendientes o realizar tareas similares de limpieza. También la función es útil si se tienen objetos muy grandes que no necesitan ser guardados completamente.

De manera correspondiente, unserialize() revisa la presencia de una función con el nombre mágico de __wakeup. Si está presente, esta función puede reconstruir cualesquiera recursos que el objeto pueda tener.

El propósito de utilizar __wakeup es reestablecer cualquier conexión a bases de datos que se pudiese haber perdido durante la serialización y realizar otras tareas de reinicialización.

add a note add a note

User Contributed Notes 1 note

up
-6
ranware2200 at yahoo dot com
3 years ago
This is a simple example of how to implement serialization using the __sleep and __wakeup magic methods...

<?php
//student.class.php
class Student{
    private
$full_name = '';
    private
$score = 0;
    private
$grades = array();
   
    public function
__construct($full_name, $score, $grades)
    {
       
$this->full_name = $full_name;
       
$this->grades = $grades;
       
$this->score = $score;
    }
   
    public function
show()
    {
        echo
$this->full_name;
    }
   
    function
__sleep()
    {
        echo
'Going to sleep...';
        return array(
'full_name', 'grades', 'score');
    }
   
    function
__wakeup()
    {
        echo
'Waking up...';
    }
}
?>

<?php
//a.php
include 'student.class.php';

$student = new Student('bla bla', 'a', array('a' => 90, 'b' => 100));
$student->show();
echo
"<br />\n";
$s = serialize($student);
echo
$s ."<br />\n";
$fp = fopen('./uploads/session.s', 'w');
fwrite($fp, $s);
fclose($fp);
?>

<?php
//b.php
include 'student.class.php';

$s = implode('', file("./uploads/session.s"));
echo
$s ."<br />\n";
$a = unserialize($s);
$a->show();
?>
To Top