EstiloCSSTutoriales y tips en español

RSS

Serialización en PHP

Por Iván Bustos en . Actualizado: 29/6/2011. Visitado 1394 veces. Compartir en LinkedIn

PobreExcelente 

Basado en 9 votaciones.

Iván BustosIván Bustos, un desarrollador web en Colombia con más de 10 años de experiencia en el desarrollo de experiencias en línea, enamorado de los estándares web y del poder de JavaScript. Fundador de Estilocss.com y creador de IBForm.

Aprenda más en:
http://www.ivanbustos.com

Serialización no es más que convertir y/o comprimir una instancia de una clase en un formato fácil de leer tanto para máquinas como para humanos. El resultado puede ser guardado en un archivo que luego puede ser enviado a través de una conexión de red a otra ubicación donde se procesa la des-serialización. Es decir, volver a crear el objeto original a partir del archivo serializado.

Entre las formatos más comunes usados para serializar objetos para luego transmitirlos, se encuentra sin duda los archivos de texto así como recientemente el formato XML. PHP nativamente implementa serialización y deserialización a través de las funciones serialize() y unserialize() respectivamente.

Considera el siguiente ejemplo:

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es">
  3.    <head>
  4.       <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5.       <title>Prueba</title>
  6.    </head>
  7.    <body>
  8. <?php
  9.    class Usuario
  10.    {
  11.       public $nombreUsuario;
  12.       private $contrasena;
  13.       public $ingresosHoy;
  14.       public function Usuario($nombre, $llave)
  15.       {
  16.          $this->escribirUsuario($nombre);
  17.          $this->escribirContrasena($llave);
  18.          $this->ingresosHoy = 0;
  19.       }
  20.       public function escribirUsuario($nombre)
  21.       {
  22.          $this->nombreUsuario = $nombre;
  23.       }
  24.       public function escribirContrasena($llave)
  25.       {
  26.          $this->contrasena = $llave;
  27.       }
  28.       public function ingresar()
  29.       {
  30.          $this->ingresosHoy++;
  31.       }
  32.    }
  33.    $miUsuario = new Usuario("Pedro", "kas24j");
  34.    $miUsuario->ingresar();
  35.    echo "<h2>El objeto miUsuario como luce ahora:</h2>";
  36.    print_r($miUsuario);
  37.    $usuarioSerializado = serialize($miUsuario);
  38.    echo "<h2>El objeto miUsuario fue serializado en la siguiente cadena de texto:</h2>";
  39.    echo "<p>$usuarioSerializado</p>";
  40.    echo "<h2>Convirtiendo la cadena de texto de nuevo a objeto...</h2>";
  41.    $obj = unserialize($usuarioSerializado);
  42.    echo "<h2>El objeto deserializado:</h2>";
  43.    print_r($obj);
  44. ?>
  45.    </body>
  46. </html>

Que proporciona:

Resultado de serialización

El código anterior demuestra el funcionamiento básico de las funciones serialize() y unserialize(). La clase Usuario es muy simple; contiene 3 variables privadas miembro ($nombreUsuario, $contrasena e $ingresoHoy) así como 3 métodos accesores (escribirUsuario(), escribirContrasena() e ingresar()) y un constructor.

En la línea 33 cremos una instancia de nuestra clase Usuario llamada $miUsuario. Nota que en el constructor asignamos valores de "Pedro" y "kas24j" a sus parámetros con el fin de popular las variables miembro $nombreUsuario y $contrasena respectivamente. Enseguida ejecutamos el método ingresar() de nuestro objeto recién creado. Esto simplemente aumentará en 1 nuestra variable $ingresosHoy.

Observa el uso de la función print_r() en la línea 36. Esta función simplemente desglosa una variable y la muestra en pantalla de una manera fácil de leer para el usuario. Esto permite ver exactamente el contenido actual de cualquier objeto.

En la línea 37, le hemos asignado a una nueva variable $usuarioSerializado el resultado del proceso de serialización de nuestro objeto $miUsuario. Esta variable la mostramos como cualquier cadena de texto en la línea 39. El resultado es fácil de leer para las máquinas pero realmente no para las personas.

Lo interesante es que esa misma cadena de texto que acabamos de mostrar la podemos crear en otro objeto que será una copia exacta de nuestro objeto original $miUsuario. En la línea 41 creamos un objeto nuevo y le asignamos el resultado de la des-serialización de nuestro objeto $miUsuario y volvemos a mostrar el contenido a través de print_r(). Como verás, el resultado es idéntico al de nuestro objeto original.

El 1 de abril de 2011, Fernando Loor dijo:

Está bueno el artículo y me gusta mucho el diseño del sitio nuevo. Felicidades Ivan.

Haga clic en cualquier etiqueta para ver más tutoriales

EstiloCSS.com | Creative Commons License | Otro sitio más de Iván Bustoshttp://www.ivanbustos.com/Miami, FL 33166United States.