Serializar: Qué es y cómo se hace

This post was published 9 years ago. It may be exremely outdated.

Supongamos que tenemos una variable que queremos almacenar conservando su tipo, por ejemplo, una matriz o un objeto. Podríamos pensar primero en almacenarla tal cual en una Base de Datos o en un archivo, pero pronto descubriríamos que como mínimo perdemos el tipo, si no es que perdemos también por el camino la información y provocamos algún que otro error.

La solución a nuestro problema sería transformar nuestra variable en una cadena de caracteres (que fácilmente se almacenan en archivos o Base de Datos), que al ser interpretada, nos devolviese un duplicado de nuestra variable. Esto, ni más ni menos, es la serialización.

En PHP podemos serializar variables (transformar la matriz o el objeto en una cadena de texto) con la función serialize, y desserializarlas (transformar la cadena de texto en la variable original) con la función unserialize. Aquí viene un ejemplo:

<?php
$matriz = ('manzana', 'pera', 'naranja', 'limon'); // Nuestra matriz
$matriz_serializada = serialize($matriz); // La variable $matriz_serializada contiene la matriz serializada
$matriz_desserializada = unserialize($matriz_serializada); // La variable $matriz_desserializada es idéntica a la matriz original
?>

Puede ser que os preguntéis si realmente tiene utilidad guardar las variables con sus respectivos tipos y la respuesta es un indudable sí. ¿Por qué? Lo veréis con facilidad con un ejemplo y el que tengo más a mano es WP Carousel. Aunque no lo parezca, internamente WP Carousel sólo utiliza dos filas en una tabla de la Base de Datos de WordPress. En estas filas, tan sólo hay un campo que contenga información propia del plugin (el resto son identificadores y nombres que utiliza WordPress para acceder al campo).

¿Y qué contiene este campo? Un texto serializado que al desserializarse da lugar a una matriz multidimensional que contiene toda la configuración de todos los carruseles y todo el contenido de cada carrusel.

Lo único que no se puede serializar son los recursos, como conexiones a Bases de Datos, conexiones a archivos abiertos, etc.

Leave a Reply