Home  >  Article  >  Backend Development  >  Analysis of the difference between serialization and deserialization operations of SERIALIZE and JSON in PHP

Analysis of the difference between serialization and deserialization operations of SERIALIZE and JSON in PHP

高洛峰
高洛峰Original
2016-12-20 15:35:441325browse

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!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn