0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p>Теги: php, php программирование, сериализация в php, преобразование объекта в строку, преобразование строки в объект, десериализация</p>
1
<p>Теги: php, php программирование, сериализация в php, преобразование объекта в строку, преобразование строки в объект, десериализация</p>
2
<p>В этой статье поговорим о том, как происходит<strong>преобразования объекта в строку</strong><a>на PHP</a>, что такое<strong>сериализация объектов</strong>в PHP и зачем, собственно говоря, всё это нужно.</p>
2
<p>В этой статье поговорим о том, как происходит<strong>преобразования объекта в строку</strong><a>на PHP</a>, что такое<strong>сериализация объектов</strong>в PHP и зачем, собственно говоря, всё это нужно.</p>
3
<h2>Для чего нужна сериализация в PHP?</h2>
3
<h2>Для чего нужна сериализация в PHP?</h2>
4
<p>Представьте, что вы создаёте<strong>клиент-серверное приложение</strong>на PHP, в котором хотите обмениваться информацией со скриптом. Если это ваш случай, то не обойтись без сериализации. Именно она позволяет выполнить преобразование обычного PHP-объекта в строку, которую поймёт скрипт.</p>
4
<p>Представьте, что вы создаёте<strong>клиент-серверное приложение</strong>на PHP, в котором хотите обмениваться информацией со скриптом. Если это ваш случай, то не обойтись без сериализации. Именно она позволяет выполнить преобразование обычного PHP-объекта в строку, которую поймёт скрипт.</p>
5
<h2>Преобразуем объект в строку на практике</h2>
5
<h2>Преобразуем объект в строку на практике</h2>
6
<p>Чтобы выполнить преобразование объекта в строку, в PHP применяются специальные функции: - serialize() - обеспечивает преобразование объекта в строку; - unserialize() - выполняет преобразование обратно.</p>
6
<p>Чтобы выполнить преобразование объекта в строку, в PHP применяются специальные функции: - serialize() - обеспечивает преобразование объекта в строку; - unserialize() - выполняет преобразование обратно.</p>
7
<p>Давайте возьмём в качестве примера класс User и создадим его объект:</p>
7
<p>Давайте возьмём в качестве примера класс User и создадим его объект:</p>
8
<?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; } ?><p>Результатом станет получение строки, хранящей наш объект. После этого можно передать строку, например, скрипту.</p>
8
<?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; } ?><p>Результатом станет получение строки, хранящей наш объект. После этого можно передать строку, например, скрипту.</p>
9
<p>Идём дальше: давайте теперь выполним преобразование строки обратно в объект:</p>
9
<p>Идём дальше: давайте теперь выполним преобразование строки обратно в объект:</p>
10
$user = unserialize($string);<p>И проверим, что объект по-прежнему работает:</p>
10
$user = unserialize($string);<p>И проверим, что объект по-прежнему работает:</p>
11
echo $user->getName(); // вернёт 'Tom'<p>Использование PHP-сериализации при сохранении объекта позволит сохранить все его переменные. Однако<strong>методы сохранены не будут</strong>. Это значит, что если мы хотим, чтобы всё работало, нам нужно<strong>подключать класс раньше</strong>, чем мы вызываем функцию unserialize(). Это можно сделать двумя способами: - сохранить определения класса User в отдельный файл с последующим подключением этого файла; - использовать функцию spl_autoload_register() для автоматического подключения:</p>
11
echo $user->getName(); // вернёт 'Tom'<p>Использование PHP-сериализации при сохранении объекта позволит сохранить все его переменные. Однако<strong>методы сохранены не будут</strong>. Это значит, что если мы хотим, чтобы всё работало, нам нужно<strong>подключать класс раньше</strong>, чем мы вызываем функцию unserialize(). Это можно сделать двумя способами: - сохранить определения класса User в отдельный файл с последующим подключением этого файла; - использовать функцию spl_autoload_register() для автоматического подключения:</p>
12
<?php spl_autoload_register(function($name) { require_once $name.'.php'; }); $user = unserialize($string); ?><h2>"Волшебные" методы __sleep и __wakeup</h2>
12
<?php spl_autoload_register(function($name) { require_once $name.'.php'; }); $user = unserialize($string); ?><h2>"Волшебные" методы __sleep и __wakeup</h2>
13
<p>Иногда возникает необходимость перед преобразованием объекта в строку выполнить какое-нибудь действие. Для подключения к событиям сериализации и десериализации в PHP используют методы __sleep() и__wakeup(). Кроме того, метод __sleep() даёт возможность сериализовать только некоторое подмножество свойств объекта. Пример работы данных методов:</p>
13
<p>Иногда возникает необходимость перед преобразованием объекта в строку выполнить какое-нибудь действие. Для подключения к событиям сериализации и десериализации в PHP используют методы __sleep() и__wakeup(). Кроме того, метод __sleep() даёт возможность сериализовать только некоторое подмножество свойств объекта. Пример работы данных методов:</p>
14
<?php class User { // ... public function __sleep() { echo 'Начинаем конвертировать объект в строку<br>'; return ['name', 'role']; } public function __wakeup() { echo '<br>Начинаем конвертировать строку в объект'; } } ?><p>На этом всё, удачного вам кодинга!</p>
14
<?php class User { // ... public function __sleep() { echo 'Начинаем конвертировать объект в строку<br>'; return ['name', 'role']; } public function __wakeup() { echo '<br>Начинаем конвертировать строку в объект'; } } ?><p>На этом всё, удачного вам кодинга!</p>
15
<p><em>Хотите знать больше? Записывайтесь на курс "<a>Backend-разработчик на PHP</a>"!</em></p>
15
<p><em>Хотите знать больше? Записывайтесь на курс "<a>Backend-разработчик на PHP</a>"!</em></p>
16
16