PHP Velho Oeste 2024

As funções mágicas __sleep e __wakeup

serialize() verifica se sua classe possui um método com o nome mágico __sleep. Se houver, ele será executado antes de qualquer serialização. Ele pode ser utilizado para fazer uma limpeza no objeto, e é esperado que retorne um array com os nomes de todos as variáveis deste objeto que devem ser serializados. Caso o método não retorne nada, NULL será serializado e um E_NOTICE será lançado.

O objetivo de uso do __sleep é confirmar dados pendentes ou realizar tarefas de limpezas. A função é também útil quando você está lidando com objetos muito grandes e que não precisam ser completamente salvos.

No caso inverso, unserialize() verifica a presença de um método com o nome mágico __wakeup. Caso exista, será chamado e poderá reconstruir qualquer recurso que este objeto pode ter.

A inteção de utilização do __wakeup é reestabelecer quaisquer conexões com banco de dados que podem ter sido perdidas durante a serialização e realizar outras tarefas de reinicialização.

add a note add a note

User Contributed Notes 2 notes

up
21
Ninsuo
9 years ago
If you want to serialize all but one properties, you can use:

<?php

class A
{

   protected
$a = 1;
   protected
$b = 2;
   protected
$c = 3;
   protected
$d = 4; // unwanted

   
public function __sleep()
    {
        return
array_diff(array_keys(get_object_vars($this)), array('d'));
    }
   
}
up
-25
Ninsuo
9 years ago
If you want to serialize all but one properties, you can use:

<?php

class MyClass
{
   protected
$a;
   protected
$b;
   protected
$c;
   protected
$d; // unwanted

   
public function __sleep()
    {
        return
array_diff(get_object_vars($this), array('d'));
    }

}
To Top