Home > Article > Backend Development > PHP Tutorial-Deserialization Method
Serialization is the process of converting variables into strings that can be saved or transmitted; deserialization is to convert this string into the original variable at the appropriate time for use. These two processes combine to easily store and transfer data, making the program more maintainable. Brothers PHP training (www.lampbrother.net)
1. serialize and unserialize functions
These two are common functions for serializing and deserializing data in PHP.
$a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut');
//Serialized array
$ s = serialize($a);
echo $s;
//Output result: a:3:{s:1:"a";s:5:"Apple";s:1:"b";s: 6:"banana";s:1:"c";s:7:"Coconut";}
echo '
';
//Deserialization
$o = unserialize($s);
print_r($o);
//Output result Array ( [a] => Apple [b] => banana [c] => Coconut )
?>
When the array value Problems may occur when characters such as double quotes, single quotes, or colons are included when they are deserialized. To overcome this problem, a neat trick is to use base64_encode and base64_decode.
$obj = array();
//Serialization
$s = base64_encode(serialize($obj));
//Deserialization
$original = unserialize(base64_decode($s));
But base64 encoding will Increase the length of the string. To overcome this problem, it can be used with gzcompress.
//Define a function for serializing objects
function my_serialize( $obj )
{
Return base64_encode(gzcompress(serialize($obj)));
}
//Deserialization
function my_unserialize($txt)
{
Return unserialize(gzuncompress(base64_decode($txt)));
}
2. json_encode and json_decode
Using JSON format serialization and deserialization is a good choice:
Use json_encode and json_decode format output to serialize and unserialize format is much faster.
JSON format is readable.
JSON format returns smaller data than serialize.
The JSON format is open and portable. Other languages can use it as well.
$a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut');
//Serialized array
$s = json_encode($a);
echo $s;
//Output result: {"a":"Apple","b":"banana","c":"Coconut"}
echo '< br />
';
//Deserialization
$o = json_decode($s);
In the above example, the json_encode output length is obviously longer than the serialize output length in the previous example Be short.
3. var_export and eval
The var_export function outputs the variable as a string; eval executes the string as a PHP code and deserializes it to obtain the contents of the original variable.
$a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut');
//Serialized array
$s = var_export($ a, true);
echo $s;
//Output result: array ( 'a' => 'Apple', 'b' => 'banana', 'c' => 'Coconut', )
echo '
';
//Deserialization
eval('$my_var=' . $s . ';');
print_r($my_var);
4. wddx_serialize_value and wddx deserialize
The wddx_serialize_value function can serialize array variables and output them as XML strings.
$a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut');
//Serialize array
$s = wddx_serialize_value($ a);
echo $s;
//Output result (view the source code of the output string):
echo '
';
//Deserialization
$o = wddx_deserialize($s);
print_r($o);
//Output result: Array ( [a] => Apple [b] => banana 1 => Coconut )
It can be seen that XML tags have many characters, so the serialization of this format still takes up a lot of space.
Summary
All the above functions can be executed normally when serializing array variables, but it is different when applied to objects. For example, json_encode serialized objects will fail. When deserializing objects, unserialize and eval will have different effects.