__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 (); 


?>