Преобразование объекта в строку на PHP | OTUS
⚡ Подписка на курсы OTUS!
Интенсивная прокачка навыков для IT-специалистов!
Подробнее

Курсы

Программирование
Backend-разработчик на PHP
-9%
Алгоритмы и структуры данных
-9%
Team Lead
-6%
Архитектура и шаблоны проектирования Разработчик IoT
-13%
C# Developer. Professional
-9%
HTML/CSS
-11%
C# ASP.NET Core разработчик
-5%
Kotlin Backend Developer
-8%
iOS Developer. Professional
-8%
Java Developer. Professional JavaScript Developer. Professional Базы данных Android Developer. Professional Framework Laravel Cloud Solution Architecture Highload Architect Reverse-Engineering. Professional Vue.js разработчик Agile Project Manager VOIP инженер Scala-разработчик Супер-практикум по использованию и настройке GIT Symfony Framework Java Developer. Basic Unity Game Developer. Professional Супер-интенсив Azure
Инфраструктура
Экспресс-курс «IaC Ansible»
-10%
Administrator Linux.Basic
-10%
Мониторинг и логирование: Zabbix, Prometheus, ELK
-10%
Экспресс-курс «CI/CD или Непрерывная поставка с Docker и Kubernetes»
-30%
Administrator Linux. Professional
-6%
Дизайн сетей ЦОД
-13%
NoSQL Основы Windows Server MS SQL Server Developer Инфраструктурная платформа на основе Kubernetes Cloud Solution Architecture Highload Architect Разработчик голосовых ассистентов и чат-ботов VOIP инженер Супер-практикум по работе с протоколом BGP Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Супер-интенсив "Tarantool"
Специализации Курсы в разработке Подготовительные курсы
+7 499 938-92-02

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

PHP_Deep_11.11-5020-5bfe43.png

В этой статье поговорим о том, как происходит преобразования объекта в строку на 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>Начинаем конвертировать строку в объект';
   }
  }
?>

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

Хотите знать больше? Записывайтесь на курс "Backend-разработчик на PHP"!

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

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

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

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