Сериализация объектов — это процесс преобразования объекта в строку (или другой формат), которую можно сохранить или передать, а затем восстановить (десериализовать) обратно в объект. В PHP это реализуется через механизм serialize()
и unserialize()
.
class User {
public $name = 'John';
protected $age = 30;
private $password = 'secret';
}
$user = new User();
$serialized = serialize($user);
Результат будет выглядеть примерно так:
O:4:"User":3:{s:4:"name";s:4:"John";s:6:"*age";i:30;s:15:"Userpassword";s:6:"secret";}
Разберем структуру:
O:4:"User"
- объект (O) класса User длиной 4 символа3
- количество свойств$restoredUser = unserialize($serialized);
При десериализации:
Магические методы:
__sleep()
- вызывается перед сериализацией, позволяет указать какие свойства сериализовать__wakeup()
- вызывается после десериализации, для восстановления ресурсовБезопасность:
Автозагрузка классов:
__PHP_Incomplete_Class
class Session {
public $data;
private $dbConnection;
public function __sleep() {
return ['data']; // Сериализуем только data
}
public function __wakeup() {
$this->dbConnection = new PDO(...); // Восстанавливаем соединение
}
}
json_encode()
/json_decode()
) - но не поддерживает объекты полностьюсериализация объектов в PHP — мощный механизм для сохранения и передачи состояния объектов, но требующий понимания его работы и осторожности при использовании с непроверенными данными.