Serialización de objetos en PHP: funciones, métodos y ejemplos prácticos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Serialización de objetos en PHP: desde lo básico hasta técnicas avanzadas



La serialización es el proceso de convertir estructuras de datos complejas (objetos, arrays) en un formato lineal, adecuado para almacenamiento o transmisión. En PHP, este mecanismo es especialmente importante para preservar el estado de los objetos entre solicitudes, transferir datos a través de API o guardarlos en bases de datos. En este artículo, analizaremos en detalle todos los aspectos de la serialización en PHP.



¿Qué es la serialización y para qué sirve?



La serialización permite "congelar" un objeto en una cadena y luego restaurarlo. Esto es útil en los siguientes escenarios:

  • Guardar sesiones de usuario (PHP serializa automáticamente los datos de la sesión)
  • Almacenar en caché objetos complejos en Redis o Memcached
  • Transferir objetos entre microservicios
  • Almacenar configuraciones en archivos
  • Depuración y registro del estado de objetos


Serialización básica: serialize() y unserialize()



PHP proporciona dos funciones principales para trabajar con la serialización:



<?phpclass User {    public $name;    public $email;    private $password;

public function __construct($name, $email, $password) { $this->name = $name; $this->email = $email; $this->password = $password; }}

$user = new User('Iván Petrov', 'ivan@example.com', 'secret123');$serialized = serialize($user);echo $serialized;// Salida: O:4:"User":3:{s:4:"name";s:11:"Iván Petrov";s:5:"email";s:16:"ivan@example.com";s:14:"\\0User\\0password";s:9:"secret123";}

// Restauración del objeto$unserialized = unserialize($serialized);echo $unserialized->name; // Iván Petrov?>


Importante: La función serialize() procesa todas las propiedades del objeto, incluidas las privadas y protegidas. Las propiedades privadas se codifican con el prefijo \\0ClassName\\0, las protegidas con \\0*\\0.



Métodos mágicos __sleep() y __wakeup()



Para controlar el proceso de serialización, PHP proporciona dos métodos mágicos:



  • __sleep() — se llama antes de la serialización. Debe devolver un array con los nombres de las propiedades que se deben serializar.
  • __wakeup() — se llama después de la deserialización. Se utiliza para reinicializar recursos (por ejemplo, conexiones a la base de datos).


<?phpclass DatabaseConnection {    private $connection;    private $dsn;    private $username;    private $password;    private $cache = [];

public function __construct($dsn, $username, $password) { $this->dsn = $dsn; $this->username = $username; $this->password = $password; $this->connect(); }

private function connect() { // Simulación de conexión a la base de datos $this->connection = new stdClass(); $this->connection->connected = true; }

public function __sleep() { // No serializamos el recurso de conexión ni la contraseña return ['dsn', 'username', 'cache']; }

public function __wakeup() { // Restauramos la conexión después de la deserialización $this->connect(); }}

$db = new DatabaseConnection('mysql:host=localhost;dbname=test', 'root', 'pass');$serialized = serialize($db);$restored = unserialize($serialized);?>


Serialización en JSON: json_encode() y json_decode()



JSON es un formato más universal, compatible con muchos lenguajes de programación. En PHP, para la serialización en JSON se utilizan las funciones json_encode() y json_decode().



<?phpclass Product {    public $id;    public $name;    public $price;

public function __construct($id, $name, $price) { $this->id = $id; $this->name = $name; $this->price = $price; }}

$product

Recommendations