(PECL igbinary >= 1.1.1)
igbinary_serialize — Genera una representación binaria almacenable y compacta de un valor
Genera una representación almacenable de un valor.
Es una técnica práctica para almacenar o pasar valores PHP entre scripts, sin perder su estructura ni su tipo.
Para reconvertir la cadena sérializada en un valor PHP, la función igbinary_unserialize() puede ser utilizada.
value
El valor a serializar. igbinary_serialize() gestiona todos los tipos excepto los recursos y ciertos objetos (confiere la nota a continuación). Incluso los arrayx que contienen referencias a sí mismos pueden ser serializados con igbinary_serialize(). Las referencias circulares dentro de un array o de un object a serializar serán igualmente almacenadas. Cualquier otra referencia será perdida.
Al serializar objetos, igbinary intentará llamar a los métodos mágicos __serialize() o __sleep() antes de la serialización. Esto permitirá al objeto realizar una limpieza de último momento, etc., antes de ser serializado. De igual manera, cuando el objeto es restaurado utilizando la función igbinary_unserialize(), uno de los métodos mágicos __unserialize() o __wakeup() es llamado.
Nota:
Los atributos privados de un objeto tendrán el nombre de la clase prefijado al nombre del atributo; los atributos protegidos serán prefijados con un asterisco
'*'
. Estos valores prefijados tienen caracteres nulos en ambos lados.
Retorna una cadena de caracteres que contiene una representación del parámetro value
en forma de flujo de bytes que puede ser almacenado en cualquier lugar.
Es de notar que es una cadena binaria que puede incluir caracteres nulos, y debe por lo tanto ser almacenada y gestionada como tal.
Por ejemplo, en una base de datos, la salida de la función igbinary_serialize()
debe, en general, ser almacenada en un campo de tipo BLOB
en lugar de en un campo de tipo CHAR
o TEXT
.
Ejemplo #1 Ejemplo con igbinary_serialize()
<?php
$ser = igbinary_serialize(['test', 'test']);
echo urlencode($ser), "\n";
var_export(igbinary_unserialize($ser));
?>
El resultado del ejemplo sería:
%00%00%00%02%14%02%06%00%11%04test%06%01%0E%00 array ( 0 => 'test', 1 => 'test', )
Nota:
Es de notar que muchos objetos internos de PHP no pueden ser serializados. Sin embargo, aquellos que pueden implementan ya sea la interfaz Serializable o los métodos mágicos __serialize()/__unserialize() o __sleep()/__wakeup(). Si una clase interna no cumple ninguna de estas condiciones, no puede ser serializada de manera fiable.
Existen excepciones históricas a esta regla, donde objetos internos pueden ser serializados sin implementar ni la interfaz ni los métodos mágicos.