PHP __sleep () et __wakeup ()


Exemple

__sleep et __wakeup sont des méthodes liées au processus de sérialisation. serialize vérifie si une classe a une méthode __sleep . Si c'est le cas, il sera exécuté avant toute sérialisation. __sleep est censé retourner un tableau des noms de toutes les variables d'un objet à sérialiser.

__wakeup à son tour sera exécuté par unserialize s'il est présent dans la classe. Son intention est de rétablir les ressources et autres éléments nécessaires à l'initialisation lors de la désérialisation.

class Sleepy {
    public $tableName;
    public $tableFields;
    public $dbConnection;

    /**
     * This magic method will be invoked by serialize function.
     * Note that $dbConnection is excluded.
     */
    public function __sleep()
    {
        // Only $this->tableName and $this->tableFields will be serialized.
        return ['tableName', 'tableFields'];
    }

    /**
     * This magic method will be called by unserialize function.
     *
     * For sake of example, lets assume that $this->c, which was not serialized,
     * is some kind of a database connection. So on wake up it will get reconnected.
     */
    public function __wakeup()
    {
        // Connect to some default database and store handler/wrapper returned into
        // $this->dbConnection
        $this->dbConnection = DB::connect();
    }
}