serialize() revisa si su clase tiene una función con el nombre mágico __sleep. De ser así, esa función es ejecutada antes de cualquier intento de seriación. Puede limpiar el objeto y su intención es que devuelva una matriz con los nombres de todas las variables de ese objeto que deberían ser seriadas.
El uso planeado para __sleep es aplicar o sincronizar datos pendientes o realizar tareas similares de limpieza. Asimismo, la función resulta útil si tiene objetos bastante grandes que no necesitan ser guardados en su totalidad.
De forma semejante, unserialize() revisa por la presencia de una función con el nombre mágico __wakeup. Si está presente, esta función puede reconstruir cualquier recurso que el objeto pueda tener.
El uso planeado para __wakeup es reestablecer cualquier conexión con bases de datos que hayan podido perderse durante la seriación y realizar otras tareas de reinicialización.