2010-01-14 14 views
5

Estoy viendo esta función: serialize() para PHP y realmente no entiendo cuál es su función. ¿Alguien puede proporcionar un ejemplo simple con salida?No entiendo serialize()

Respuesta

14

Básicamente, el objetivo de serialize es transformar cualquier tipo de datos (alsmost) en una cadena, por lo que se puede transmitir, almacenar, ...

Un ejemplo rápido:

$my_array = array(
    'a' => 10, 
    'glop' => array('test', 'blah'), 
); 
$serialized = serialize($my_array); 
echo $serialized; 

le conseguirá este resultado:

a:2:{s:1:"a";i:10;s:4:"glop";a:2:{i:0;s:4:"test";i:1;s:4:"blah";}} 


Y, más tarde, que c un unserialize esa cadena, para obtener los datos originales de vuelta:

$serialized = 'a:2:{s:1:"a";i:10;s:4:"glop";a:2:{i:0;s:4:"test";i:1;s:4:"blah";}}'; 
$data = unserialize($serialized); 
var_dump($data); 

le conseguirá:

array 
    'a' => int 10 
    'glop' => 
    array 
     0 => string 'test' (length=4) 
     1 => string 'blah' (length=4) 


usos comunes incluyen:

  • Capacidad de transmisión de (casi) cualquier tipo de datos de PHP desde un script PHP a otro
  • Posibilidad de almacenar (casi) cualquier clase de datos PHP en un solo campo de base de datos - incluso si no es una buena práctica en el lado de la base de datos, a veces puede ser útil
  • Posibilidad de almacenar datos en algún almacenamiento en caché MECANISMO (APC, memcached, archivos, ...), en el que puede almacenar sólo cadenas

Tenga en cuenta, sin embargo, que el uso de serialize es grande cuando se está trabajando solamente con PHP (ya que es un PHP-específica formato, que puede funcionar con casi cualquier clase de datos PHP, y es realmente rápido); pero no es tan bueno cuando también tiene que trabajar con algo más que PHP (ya que es específico de PHP). En esos casos, puede utilizar XML, JSON (ver json_encode y json_decode), ...


en el manual de PHP, también se puede leer la sección Object Serialization, por cierto.

2

Si desea guardar una matriz u objeto normalizado en una fila de base de datos, por ejemplo, serialize() (y unserialize()) son sus amigos, porque no puede almacenar una matriz o un objeto aplanado sin antes convertirlo en una cadena.

json_encode() y json_decode() son similares, excepto que codifican como JSON.