Home > Article > Backend Development > Analysis of the difference between serialization and deserialization operations of SERIALIZE and JSON in PHP
The example in this article describes the difference between the serialization and deserialization operations of SERIALIZE and JSON in PHP. Share it with everyone for your reference, the details are as follows:
What is the difference between SERIALIZE and JSON serialization and deserialization in PHP? We can take a look at this issue with the editor. The specific operation details are as follows.
In PHP, what is the difference between serialize and json to serialize or deserialize an object or array?
Assume an object and an array:
$web = new stdClass; $web->site = 'tantengvip'; $web->owner = 'tuntun'; $web->age = 5; //和 $web = array(); $web['site'] = 'tantengvip'; $web['owner'] = 'tuntun'; $web['age'] = 5;
Use the serialize function and unserialize function to serialize and deserialize them respectively, and see what the printed results are, as follows:
Use the serialize method:
var_dump(serialize($web)); var_dump(unserialize(serialize($web))); var_dump(json_encode($web)); var_dump(json_decode(json_encode($web)));
The result:
string 'O:8:"stdClass":3:{s:4:"site";s:10:"tantengvip";s:5:"owner";s:6:"tuntun";s:3:"age";i:5;}' (length=87) object(stdClass)[127] public 'site' => string 'tantengvip' (length=10) public 'owner' => string 'tuntun' (length=6) public 'age' => int 5 string '{"site":"tantengvip","owner":"tuntun","age":5}' (length=46) object(stdClass)[127] public 'site' => string 'tantengvip' (length=10) public 'owner' => string 'tuntun' (length=6) public 'age' => int 5
Using json method:
var_dump(serialize($web)); var_dump(unserialize(serialize($web))); var_dump(json_encode($web)); var_dump(json_decode(json_encode($web),true));
Result:
string 'a:3:{s:4:"site";s:10:"tantengvip";s:5:"owner";s:6:"tuntun";s:3:"age";i:5;}' (length=74) array (size=3) 'site' => string 'tantengvip' (length=10) 'owner' => string 'tuntun' (length=6) 'age' => int 5 string '{"site":"tantengvip","owner":"tuntun","age":5}' (length=46) array (size=3) 'site' => string 'tantengvip' (length=10) 'owner' => string 'tuntun' (length=6) 'age' => int 5
We found that for such an object or array defined previously, serialize and json are used to serialize, and the deserialized result is the same as the original, and there is no What is the difference, except that the serialization format is different.
So what is the difference between them? The following text summarizes it very well, so I won’t explain it myself. You can write code to verify it.
Use json serialization and deserialization
Advantages:
Variables are still readable after serialization
Can be used by other systems because JSON format is standard
Disadvantages:
Only for UFT-8 data Valid, other encodings may not work well
Only valid for stdClass class examples
Use serialize method to serialize and deserialize
Advantages:
Allows non-UTF-8 variables
Supports other than stdClass examples Other examples
Disadvantages:
The encoded text is unreadable to humans
Cannot be referenced by systems in other languages
Okay, write a code to see:
class Test { private $pri = 'pri'; public $class = 'Test'; public function __construct() { $this->class = 'Test construct'; $this->pri = 'pri construct'; } } $test = new Test(); var_dump(serialize($test)); var_dump(unserialize(serialize($test))); var_dump(json_encode($test)); var_dump(json_decode(json_encode($test)));
Result:
string 'O:4:"Test":2:{s:9:"�Test�pri";s:13:"pri construct";s:5:"class";s:14:"Test construct";}' (length=86) object(Test)[127] private 'pri' => string 'pri construct' (length=13) public 'class' => string 'Test construct' (length=14) string '{"class":"Test construct"}' (length=26) object(stdClass)[127] public 'class' => string 'Test construct' (length=14)
We found that, JSON serialization and deserialization lose the private member variables in the class, while serialize serialization and deserialization can be used as long as they are variables of the class, but the member methods of the class cannot be serialized or deserialized.
In general, it is better to use json, because json is a cross-platform universal format. In addition to json, it is also better to use xml. So when should you use serialize?
When deserializing a class, the magic method __wakeUp() will be called by default, which allows the object to re-establish various states that were not retained during serialization. For example: database connection, etc. That's another question, I won't delve into it here
I hope this article will be helpful to everyone in PHP programming.
For more articles on the difference analysis between serialization and deserialization operations of SERIALIZE and JSON in PHP, please pay attention to the PHP Chinese website!