__sleep і __wakeup
Функція serialize () перевіряє, чи присутній у вашому класі метод з "магічним" іменем __sleep. Він може очистити об'єкт, буде повернутий масив з іменами всіх змінних об'єкта, який повинен бути серіалізований. Якщо метод нічого не повертає крім NULL, то це означає, що об'єкт серіалізований і видається попередження E_NOTICE.
Зазвичай __sleep використовується для передачі очікуваних даних або для виконання звичайних завдань їх очищення. Також, цей метод можна виконувати в тих випадках, коли ви не хочете зберігати дуже великі об'єкти повністю.
З іншого боку, функція unserialize () перевіряє наявність методу з "магічним" іменем __wakeup. Якщо такий є, то він може відтворити всі ресурси об'єкта, які той має.
Зазвичай __wakeup використовується для відновлення будь-яких з'єднань з базою даних, які могли бути втрачені під час операції серіалізації та виконання інших операцій повторної ініціалізації.
Приклад Sleep і wakeup
<? Php
class Connection {
protected $link;
private $server, $username, $password, $db;
public function __construct ($ server, $ username, $ password, $ db)
{
$this-> server = $server;
$this-> username = $username;
$this-> password = $password;
$this-> db = $db;
$this-> connect();
}
private function connect ()
{
$this-> link = mysql_connect ($this-> server, $this-> username, $this-> password);
mysql_select_db ($this-> db, $this-> link);
}
public function __sleep ()
{
return array ('server', 'username', 'password', 'db');
}
public function __wakeup ()
{
$this-> connect ();
}
}
?>