Полный цикл в digital

Сериализация данных

Представьте, что вы создаёте клиент-серверное приложение на PHP, в котором хотите обмениваться информацией со скриптом. Если это ваш случай, то не обойтись без сериализации. Именно она позволяет выполнить преобразование обычного PHP-объекта в строку, которую поймёт скрипт.

Чтобы выполнить преобразование объекта в строку, в PHP применяются специальные функции:

  1. serialize() обеспечивает преобразование объекта в строку
  2. unserialize() выполняет преобразование обратно

Давайте возьмём в качестве примера класс User и создадим его объект:

<?php
class User {
    private $name;
    private $role;

    public function __construct($name, $role) {
        $this->name = $name;
        $this->role = $role;
    }

    public function changeName($name) {
        $this->name = $name;
    }

    public function changeRole($role) {
        $this->role = $role;
    }

    public function getName() {
        return $this->name;
    }

    public function getRole() {
        return $this->role;
    }
}

$user = new User('Tom', 1);
$string = serialize($user);
echo $string;

Результатом станет получение строки, хранящей наш объект. После этого можно передать строку, например, скрипту или сохранить в базу данных.

Давайте теперь выполним преобразование строки обратно в объект:

<?php
class User {
    private $name;
    private $role;

    public function __construct($name, $role) {
        $this->name = $name;
        $this->role = $role;
    }

    public function changeName($name) {
        $this->name = $name;
    }

    public function changeRole($role) {
        $this->role = $role;
    }

    public function getName() {
        return $this->name;
    }

    public function getRole() {
        return $this->role;
    }
}

$user = new User('Tom', 1);
$string = serialize($user);
echo $string;

$user = unserialize($string);
// вернёт Tom
echo $user->getName();

Методы __sleep и __wakeup

Иногда возникает необходимость перед преобразованием объекта в строку выполнить какое-нибудь действие. Для подключения к событиям сериализации и десериализации в PHP используют методы __sleep() и __wakeup(). Метод __sleep() даёт возможность сериализовать только некоторое подмножество свойств объекта. Пример работы данных методов:

<?php
class User {
    private $name;
    private $role;

    public function __sleep() {
        echo 'Начинаем конвертировать объект в строку';
        echo '<br>';
        return ['name', 'role'];
    }

    public function __wakeup() {
        echo '<br>';
        echo 'Начинаем конвертировать строку в объект';
    }

    public function __construct($name, $role) {
        $this->name = $name;
        $this->role = $role;
    }

    public function changeName($name) {
        $this->name = $name;
    }

    public function changeRole($role) {
        $this->role = $role;
    }

    public function getName() {
        return $this->name;
    }

    public function getRole() {
        return $this->role;
    }
}

$user = new User('Tom', 1);
$string = serialize($user);
echo $string;

$user = unserialize($string);
// вернёт Tom
echo $user->getName();
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!