Серіалізація об'єктів
Серіалізація об'єктів - збереження об'єктів між сесіями
Функцияserialize() повертає рядкове подання будь-якого значення, яке може бути збережене у PHP. Функція unserialize() може використовувати цей рядок для відновлення вихідного значення змінної. Використання серіалізації для збереження об'єкта збереже всі його змінні. Методи в об'єкті не будуть збережені лише ім'я класу.
Щоб десеріалізувати об'єкт функцією unserialize()необхідно заздалегідь визначити клас цього об'єкта. Тобто, якщо є екземпляр класу А, і він буде серіалізований, буде отримано його рядкове уявлення, яке містить значення всіх змінних, що містяться в ньому. Щоб відновити об'єкт із рядка в іншому PHP-файлі, клас A повинен бути визначений у цьому файлі заздалегідь. Це можна зробити, наприклад, шляхом збереження визначення класу A в окремому файлі та підключення цього файлу або викликом функції spl_autoload_register() для автоматичного з'єднання.
Loading...
Якщо в додатку серіалізуються об'єкти, які будуть використані в додатку пізніше, слідують суворій рекомендації — підключати визначення класу для цього об'єкта у всьому додатку. При невиконанні цієї вимоги десеріалізація об'єкта пройде без визначення класу, але PHP призначить цьому об'єкту клас __PHP_Incomplete_Class_Name, що не має методів, і зробить об'єкт марним.
Тому, як у прикладі вище, якщо змінна $a стала частиною сесії шляхом додавання нового ключа до суперглобального масиву $_SESSIONпотрібно підключати файл A.php
на всіх сторінках, а не лише на сторінках page1.php та page2.php.
Зверніть увагу, що, окрім уже наведеної поради, можна підключитися до подій серіалізації та десеріалізації об'єкта через методи __sleep() і __wakeup()В методе__sleep() можна керувати тим, які якості об'єкта будуть серіалізовані.