Преобразование объекта в строку на PHP
В этой статье поговорим о том, как происходит преобразования объекта в строку на PHP, что такое сериализация объектов в PHP и зачем, собственно говоря, всё это нужно.
Для чего нужна сериализация в PHP?
Представьте, что вы создаёте клиент-серверное приложение на PHP, в котором хотите обмениваться информацией со скриптом. Если это ваш случай, то не обойтись без сериализации. Именно она позволяет выполнить преобразование обычного PHP-объекта в строку, которую поймёт скрипт.
Преобразуем объект в строку на практике
Чтобы выполнить преобразование объекта в строку, в PHP применяются специальные функции:
—
Давайте возьмём в качестве примера класс 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-сериализации при сохранении объекта позволит сохранить все его переменные. Однако методы сохранены не будут. Это значит, что если мы хотим, чтобы всё работало, нам нужно подключать класс раньше, чем мы вызываем функцию
<?php spl_autoload_register(function($name) { require_once $name.'.php'; }); $user = unserialize($string); ?>
«Волшебные» методы __sleep и __wakeup
Иногда возникает необходимость перед преобразованием объекта в строку выполнить какое-нибудь действие. Для подключения к событиям сериализации и десериализации в PHP используют методы
<?php class User { // ... public function __sleep() { echo 'Начинаем конвертировать объект в строку<br>'; return ['name', 'role']; } public function __wakeup() { echo '<br>Начинаем конвертировать строку в объект'; } } ?>
На этом всё, удачного вам кодинга!
Хотите знать больше? Записывайтесь на курс "Backend-разработчик на PHP"!