Серіалізация об`єктів в php.
Привіт всім! Сьогодні ми поговоримо про таку тему, як сериализация об`єктів в PHP.
Навіщо це потрібно?
Якщо ви створюєте клієнт-серверне додаток, де захочете обмінюватися інформацією зі скриптом, то тут і стане в нагоді сериализация. Потрібна вона для того, щоб перетворити звичайний php об`єкт в рядок, яку зможе зрозуміти скрипт.
приклад використання
Для того, щоб конвертувати об`єкт в рядок, використовується функція serialize (), а для того, щоб перетворити його назад - unserialize ().
Як приклад наведемо клас User і створимо його об`єкт.
lt ;?php
classUser{
private $ name-
private $ role-
publicfunction __construct($ name, $ role){
$ this-gt;name = $ name-
$ this-gt;role = $ role-
}
publicfunction changeName($ name){
$ this-gt;name = $ name-
}
publicfunction changeRole($ role){
$ this-gt;role = $ role-
}
publicfunction getName(){
return $ this-gt;name-
}
publicfunction getRole(){
return $ this-gt;role-
}
$ user =newUser(`John`,1) -
$ string = serialize($ user) -
echo $ string-
}
?gt;
Ми отримаємо рядок, що зберігає наш об`єкт. Тепер ми можемо передати її, наприклад, скрипту.
Тепер давайте перетворимо нашу рядок назад в наш об`єкт.
$ user = unserialize($ string) -
Перевіримо, що наш об`єкт працює
echo $ user-gt;getName() -// поверне `John`
Якщо ви подивіться на рядок, яку сформувала функція serialize, то помітите, що там відсутні назви методів. Так що, щоб все працювало, слід підключати клас раніше, ніж викликається функція unserialize.
lt ;?php
spl_autoload_register(function($ name){
require_once $ name.`.php`-
}) -
$ user = unserialize($ string) -
?gt;
Магічні методи __sleep і __wakeup
Якщо ви хочете, щоб перед тим, як об`єкт перетвориться в рядок, або перед тим, як об`єкт утворюється з рядка, що щось відбувалося, то використовуйте магічні методи __sleep і __wakeup.
наприклад
lt ;?php
classUser{
// ...
publicfunction __sleep(){
echo `Починаємо конвертувати об`єкт в рядок
`-
return[`Name`,`Role`] -
}
publicfunction __wakeup(){
echo `
Починаємо конвертувати рядок в об`єкт `-
}
}
?gt;
Зауважте, що в методі __sleep ви зобов`язані повернути масив, що містить назви полів, які повинні бути включені в рядок. Таким чином, ви можете виключити поля, які вам не потрібні в результуючому рядку.
Отже, на цьому все. Дякую за увагу і вдалого кодинга!
- Як використовувати секційні елементи в html5.
- Що нового в php7.1: обнуляє типи.
- Створення движка на mvc. Створюємо можливість додавання користувача в базу даних через адмін панель
- Метод tostring () в php
- Вивчаємо sass. Математичні операції.
- Поради щодо використання умов в php.
- Створення функцій в php
- Клас для відправки e-mail на php
- Створення движка на mvc. Робимо можливість редагування і видалення користувачів.
- Об`єкт object в jаvascript
- Reflection api. Reflectionclass.
- Створення движка на mvc. Починаємо робити чат.
- Модифікатори доступу в php
- Статичні властивості і методи в php
- Клас для роботи з базою даних
- Шаблон проектування "одинак" (pattern singleton).
- Створення класу в php
- Ооп проти процедурного підходу.
- Reflection api. Reflectionobject.
- Об`єкти, прототипи і конструктори в мові jаvascript.
- Створення движка на mvc. Начинам робити систему розподілу прав користувачів.