PHP Altruistas Ocio en Las Palmas
/

El proceso de serialización en PHP para pasar objetos y variables

Metodología sencilla para el paso de variables entre páginas mediante el uso de dos instrucciones sencillas de PHP.

La serialización es el proceso por el cual pasamos a un formato serie los elementos complejos de PHP. Estos elementos pueden ser Array u Objetos que reúnan un cierto conjunto de características y datos que interesa almacenar en una base de datos o fichero. También, puede interesar, pasarlo vía URL a otra u otras páginas. Las instrucciones que se usan son: serialize() para serializar  y unserialize() retornar el elemento a su estado natural.

Sin este proceso la tarea definida anteriormente se antoja complicado poderlo implementar. Serializar por tanto convierte todo el contenido de un objeto o matriz en una cadena de caracteres. Esto podemos verlo en el siguiente ejemplo.

Serialización de un objeto


<!DOCTYPE html>
<html lang="es">
<head>
   <metacharset="UTF-8">
   <metahttp-equiv="X-UA-Compatible"content="IE=edge">
   <metaname="viewport"content="width=device-width, initial-scale=1.0">
   <title>Serializar variables y objetos</title>
</head>
<body>
   <?php
      //definimos la clase siguiente que engloba los campos sobre las características de color de una portada de revista.
      class clase_colores_portada {
         var $id_portada;
         var $titulo_portada;
         var $fondo_body;
         var $fondo_portada;
         var $letra;
         var $borde;
         var $hover;
      }
    //instanciamos la variable Portada_clase a la Clase clase_colores_portada
      $Portada_clase = new clase_colores_portada;

      $Portada_clase->id_portada = 1;
      $Portada_clase->titulo_portada = "Mujer pelirroja, espalda desnuda";
      $Portada_clase->fondo_body = "black";
      $Portada_clase->fondo_portada = "rgb(28, 33, 23, 0.95)";
      $Portada_clase->letra = "rgb(236, 224, 217, 1)";
      $Portada_clase->borde = "red";
      $Portada_clase->hover = "rgb(153, 75, 51, 1)";

      $serial_object_clase = serialize ($Portada_clase);
   ?>
      <pre>
      <? php echo ("Tipo de elemento: ");
        print_r ($Portada_clase);
      ?>
      </pre><br>
      <pre>
      <? php print_r ($serial_object_clase); ?>
      </pre><br><br>
</body>
</html>

Ejecuta el código
La relación que existe entre los datos del objeto y los datos serializados es manifiesta. Sin embargo, nótese que los datos serializados son solo texto. Se puede escribir en una base de datos o en un fichero texto o en un navegador. Es fundamental usar la función mysql_real_escape_string() a todo dato que pretendamos escribir en una base de datos. Esto será necesario para escapar los caracteres especiales.

Serialización de una matriz


<!DOCTYPE html>
<html lang="es">
<head>
   <metacharset="UTF-8">
   <metahttp-equiv="X-UA-Compatible"content="IE=edge">
   <metaname="viewport"content="width=device-width, initial-scale=1.0">
   <title>Serializar variables y objetos</title>
</head>
<body>
   <?php
      //variable tipo array que definen en sus posiciones características de color de una portada de revista.

$array_portada= Array (
         'id_portada' => 1,
         'titulo_portada' => "Mujer pelirroja, espalda desnuda",
         'fondo_body' => "black",
         'fondo_portada' => "rgb(28, 33, 23, 0.95);",
         'letra' => "rgb(236, 224, 217, 1)",
         'borde' => "red",
         'hover' => "rgb(153, 75, 51, 1)"
      );
      $serial_object_clase = serialize ($array_portada);
   ?>
      <pre>
      <? php echo ("Tipo de elemento: ");
        print_r ($array_portada);
      ?>
      </pre>
      <br><br>
      <? php print_r ($serial_object_clase); ?>
      <br><br>
</body>
</html>

Ejecuta el código
Recuperar el objeto serializado


Para recuperar la información del objeto o variable es necesario utilizar la instrucción unserialize()

Ejemplo

class clase_colores_portada { 
   var $id_portada; 
   var $titulo_portada; 
   var $fondo_body; 
   var $fondo_portada; 
   var $letra; var $borde; 
   var $hover; 
}

$new_object = new clase_colores_portada; 
$new_object = unserialize ($serial_object);

Importante:
Si se ha serializado un objeto de tipo class y, además, pasado como cadena a otra página o fichero php, es preciso que esté definida la clase para poder instanciar la variable que finalmente contendrá el objeto deserializado. En estas condiciones se podrá invocar la instrucción de PHP: unserialize().

En caso contrario se obtendrá un error en la página del tipo: Fatal error: Uncaught Error: Class ‘clase_colores_portada’ not found

 

 

Deja una respuesta