Серіалізація об’єктів у PHP

Однією з особливостей PHP є те, що тривалість життя об'єктів, що створюються з його допомогою, як правило, дуже невелика. Це з тим, що це змінні і об'єкти знищуються після завершення скрипта. Протокол HTTP не є сесійним, тобто кожне звернення до сервера сприймається як звернення нового клієнта, а історія попередніх звернень не зберігається. Розробник програми повинен сам реалізовувати збереження стану програми для кожного з клієнтів, вдаючись до сесій та куків. У таких умовах набуває великого значення можливість передачі об'єкта між кількома сеансами клієнта або навіть між окремими сторінками веб-додатку.

Для збереження об'єкта у форматі, який дозволяв би надалі його відновити, часто вдаються досеріалізації, перекладу об'єкта в рядок за допомогою функції "serialize()". Такий рядок може бути збережений у файлі або базі даних, а потім з нього можна отримати збережений об'єкт за допомогою зворотної функції "unserialize()". Серіалізації можуть піддаватися як об'єкти, а й масиви зокрема багатовимірні.

Для демонстрації прикладів роботи з функціями "serialize()" та "unserialize()" створимо клас "ClassSerialize", що містить єдиний відкритий член "$serialize", ініціалізація якого буде здійснюватися в конструкторі класу.

Приклад серіалізує об'єкт "$obj_serialize" класу "ClassSerialize" у рядок, а рядок збереже у файл "serialize.sl":

Результатом роботи скрипта буде файл "serialize.sl", що містить наступний рядок:

Цей рядок призначений для функції "unserialize()" і дозволяє відновити об'єкт в іншому файлі.

Відновлення об'єкта з рядка:

Важливо, щоб у разі відновлення об'єкта скрипт мавдоступ до класу "ClassSerialize", інакше відновлення об'єкта виконатись не повністю. По суті, буде створено об'єкт-контейнер, в якому є члени класу "ClassSerialize", проте відсутні будь-які методи.

Об'єкт-контейнер буде створений, якщо клас "ClassSerialize" не буде знайдений: