4 maneiras de aplicar serialize em variáveis e arrays no PHP

4 maneiras de aplicar serialize em variáveis e arrays no PHP
4.0 1

A ideia básica do serialize de variáveis e arrays é criar uma maneira de deixar o valor de forma que ele possa ser guardada em algum lugar, permitindo que em algum momento do futuro a variável seja recriada com o respetivo valor.

1 - serialize e unserialize
As tradicionais funções nativas do PHP.

<?php
$a = array('a' => 'Amora' ,'b' => 'banana' , 'c' => 'Coco');
 
//serialize do array
$s = serialize($a);
echo $s;
//a:3:{s:1:"a";s:5:"Amora";s:1:"b";s:6:"banana";s:1:"c";s:7:"Coco";}
 
echo '
'; //unserialize $o = unserialize($s); print_r($o); ?>

Quando o array contêm caracteres como a aspa ("), o apóstrofe (') ou dois pontos (:), podem existir problemas ao passar pelo unserialized se estes dados tiverem sidos salvos em um banco de dados. A maneira mais simples de resolver este problema é usando base64_encode e base64_decode.
<?php
$a = array();
//serialize - $s será salvo em algum banco de dados
$s = base64_encode(serialize($a)); 
//unserialize - $txt veio de algum banco de dados
$original = unserialize(base64_decode($txt)); 
?>

Infelizmente base64 irá aumentar o tamanho da string, se isto for um problema para o seu sistema gzcompress resolverá a questão:
<?php
//função para realizar o serialize, $dados deve conter a string a passar pelo tratamento
function my_serialize($dados) { 
   return base64_encode(gzcompress(serialize($dados))); 
} 
 
//função para realizar o unserialize, $dados deve conter a string a passar pelo tratamento reverso
function my_unserialize($dados) { 
   return unserialize(gzuncompress(base64_decode($dados))); 
} 
?>


2 - json_encode e json_decode
JSON é um formato alternativo que trás vantagens em relação ao serialize/unserialize, por exemplo:
- json_encode + json_decode é muito mais rápido que serialize + unserialize;
- json trás uma string legível;
- json tem um tamanho menor que o resultado do serializado;
- json é aberto e portável. Outras linguagens poderão usar a mesma string se necessário.
<?php
$a = array('a' => 'Amora' ,'b' => 'banana' , 'c' => 'Coco');
 
//serialize do array
$s = json_encode($a);
echo $s;
//{"a":"Amora","b":"banana","c":"Coco"}
 
echo '
'; //unserialize $o = json_decode($s); ?>

Como pode ser visto no exemplo a saída do json_encode é claramente menor em relação ao primeiro exemplo mostrado neste artigo.

3 - var_export e eval
O PHP tem uma função chamada var_export, basicamente ela exporta uma variável usando a sintaxe do PHP, o que permite que com uso do eval a string se torne uma variável com o valor original.
<?php
$a = array('a' => 'Amora' ,'b' => 'banana' , 'c' => 'Coco');
 
//serialize do array
$s = var_export($a , true);
echo $s;
//strin de saída >> array ( 'a' => 'Amora', 'b' => 'banana', 'c' => 'Coco', )
 
echo '
'; //unserialize eval('$my_var=' . $s . ';'); print_r($my_var); ?>


4 - wddx_serialize_value e wddx_deserialize
Aqui a ideia é basicamente a mesma do mostrado no caso do JSON, só que usando a saída será um XML.
<?php
$a = array('a' => 'Amora' ,'b' => 'banana' , 'c' => 'Coco');
 
//serialize do array
$s = wddx_serialize_value($a);
echo $s;
 
//
Amora //bananaCoco // echo '
'; //unserialize $o = wddx_deserialize($s); print_r($o); //Array ( [a] => Amora [b] => banana [c] => Coco ) ?>


Vale ressaltar que o comportamento caso você use as técnicas com objetos terão efeitos diferentes, por exemplo json_encode simplesmente falhará, neste caso você deverá verificar isto no momento da implementação, mas tirando esses detalhes, também é possível adaptar para esta outra realidade.

Comente =)

Atenção: Todos os comentários são moderados, por isto não perca seu tempo postando bobagens ou spam.