Преобразование объекта в строку на PHP | OTUS

Курсы

Курсы в разработке Подготовительные курсы
Работа в компаниях Компаниям Блог +7 499 110-61-65

Преобразование объекта в строку на PHP

В этой статье поговорим о том, как происходит преобразования объекта в строку на PHP, что такое сериализация объектов в PHP и зачем, собственно говоря, всё это нужно.

Для чего нужна сериализация в PHP?

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

Преобразуем объект в строку на практике

Чтобы выполнить преобразование объекта в строку, в PHP применяются специальные функции: — serialize() — обеспечивает преобразование объекта в строку; — 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;
  }
?>

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

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

$user = unserialize($string);

И проверим, что объект по-прежнему работает:

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

Использование PHP-сериализации при сохранении объекта позволит сохранить все его переменные. Однако методы сохранены не будут. Это значит, что если мы хотим, чтобы всё работало, нам нужно подключать класс раньше, чем мы вызываем функцию unserialize(). Это можно сделать двумя способами: — сохранить определения класса User в отдельный файл с последующим подключением этого файла; — использовать функцию spl_autoload_register() для автоматического подключения:

<?php
  spl_autoload_register(function($name) {
   require_once $name.'.php';
  });

  $user = unserialize($string);
?>

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

<?php
  class User {
   // ...

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

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

На этом всё, удачного вам кодинга!

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться