(PECL igbinary >= 1.1.1)
igbinary_serialize — Gera uma representação binária compacta e armazenável de um valor
Gera uma representação armazenável de um valor.
Isso é útil para armazenar ou passar valores PHP sem perder seu tipo e estrutura.
Para transformar a string serializada em um valor PHP novamente, a função igbinary_unserialize() pode ser usada.
value
O valor a ser serializado. igbinary_serialize() lida com todos os tipos, exceto o tipo resource e alguns objects (veja nota abaixo). Mesmo arrays que contenham referências a si mesmo podem ser processados por igbinary_serialize(). As referências circulares dentro do array ou object que está sendo serializado também serão armazenadas. Qualquer outra referência será perdida.
Ao serializar objetos, igbinary tentará chamar as funções membro __serialize() ou __sleep() antes da serialização. Isso permite que o objeto faça qualquer limpeza de última hora, etc., antes de ser serializado. Da mesma forma, quando o objeto é restaurado usando igbinary_unserialize(), a função membro __unserialize() ou __wakeup() será chamada.
Nota:
Membros privados de objects têm o nome da classe anexado ao nome do membro; membros protegidos têm um
'*'
prefixando o nome do membro. Esses valores prefixados possuem bytes nulos em ambos os lados.
Retorna uma string contendo uma representação de fluxo de bytes de
value
que pode ser armazenada em qualquer lugar.
Observe que esta é uma string binária que pode incluir qualquer valor de byte e precisa
ser armazenada e tratada como tal. Por exemplo,
a saída de igbinary_serialize() geralmente deve ser armazenada em um campo BLOB
em um banco de dados, em vez de um campo CHAR
ou TEXT
.
Exemplo #1 Exemplo de igbinary_serialize()
<?php
$ser = igbinary_serialize(['test', 'test']);
echo urlencode($ser), "\n";
var_export(igbinary_unserialize($ser));
?>
O exemplo acima produzirá:
%00%00%00%02%14%02%06%00%11%04test%06%01%0E%00 array ( 0 => 'test', 1 => 'test', )
Nota:
Observe que muitos objetos integrados no PHP não podem ser serializados. No entanto, aqueles com essa habilidade implementam a interface Serializable ou os métodos mágicos __serialize()/__unserialize() ou __sleep()/__wakeup(). Se uma classe interna não atender a nenhum desses requisitos, ela não poderá ser serializada de forma confiável com nenhum serializador.
Existem algumas exceções históricas à regra acima, onde alguns objetos internos poderiam ser serializados sem implementar a interface ou expor os métodos.