PHP Velho Oeste 2024

Волшебные функции __sleep и __wakeup

Функция serialize() проверяет, что ваш класс имеет функцию с названием __sleep. Если это так, эта функция будет выполняться перед любой сериализацией. Она может очистить объект и должна возвращать массив с названиями всех переменных объекта, которые должны быть сериализованы. Если метод ничего не возвращает, то сериализуется NULL и происходит ошибка уровня E_NOTICE.

Функцию __sleep предполагается использовать для приведения объекта в консистентное состояние, очистки временных переменных и прочих подготовительных процедур. Также она будет полезна, если ваш объект содержит большие объемы данных, которые вам не нужно сохранять.

Аналогично, unserialize() проверяет наличие магической функции __wakeup. Если она есть, то ее можно использовать для воссоздания необходимых ресурсов класса.

Функцию __wakeup предполагается использовать для пересоздания соединений с базами данных, которые потеряются при сериализации и десериализации, и проведении других инициализирующих действий.

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