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: guía completa



La serialización es el proceso de convertir estructuras de datos complejas (objetos, arrays) en una cadena o formato binario que se puede guardar en un archivo, transmitir por red o almacenar en caché. En PHP, este mecanismo se implementa mediante las funciones integradas serialize() y unserialize(). En este artículo, analizaremos en detalle cómo funciona la serialización de objetos, qué dificultades existen y cómo usar los métodos mágicos para ajustar el proceso.



Funciones principales de serialización



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



  • serialize($value) — convierte un valor (excepto resource) en una cadena adecuada para almacenamiento. Para objetos, se guarda el nombre de la clase y todas las propiedades (incluidas las privadas y protegidas).
  • unserialize($string) — restaura el valor original a partir de una cadena. Para objetos, se llama automáticamente al constructor de la clase (si está definido) y se asignan las propiedades guardadas.


Ejemplo simple de serialización de un objeto



Consideremos una clase básica User y su 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', 'ivan@example.com', 'secret123');$serialized = serialize($user);echo $serialized;// Salida: O:4:"User":3:{s:4:"name";s:8:"Iván";s:5:"email";s:16:"ivan@example.com";s:12:"\\0User\\0password";s:9:"secret123";}?>


Tenga en cuenta: la propiedad privada $password en la cadena aparece como \\0User\\0password — esta es una notación especial para campos privados, donde \\0 es el byte nulo.



Restauración de un objeto a partir de una cadena serializada



<?php$serialized = 'O:4:"User":3:{s:4:"name";s:8:"Iván";s:5:"email";s:16:"ivan@example.com";s:12:"\\0User\\0password";s:9:"secret123";}';$user = unserialize($serialized);echo $user->name; // Ivánecho $user->email; // ivan@example.com// La propiedad privada password también se restaura, pero no es accesible directamente?>


Importante: Al deserializar, PHP intenta cargar la clase si aún no está definida. Si la clase no existe, se creará una instancia de la clase integrada __PHP_Incomplete_Class.



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. Es útil para cerrar conexiones a la base de datos, liberar recursos u ocultar datos confidenciales.
  • __wakeup() — se llama inmediatamente después de la deserialización. Se utiliza para reconectar a la base de datos, restaurar recursos o verificar la integridad de los datos.


Ejemplo con __sleep() y __wakeup()



<?phpclass DatabaseConnection {    private $host;    private $user;    private $password;    private $connection;

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

private function connect() { // Simulación de conexión $this->connection = "Recurso de conexión a {$this->host}"; }

public function __sleep() { // No serializamos el recurso de conexión, solo los datos para reconectar return ['host', 'user', 'password']; }

public function __wakeup() { // Restaura

Recommendations