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

高洛峰
Release: 2023-03-03 17:24:01
Original
1383 people have browsed it

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;
Copy after login

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)));
Copy after login

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
Copy after login

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));
Copy after login

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
Copy after login

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)));
Copy after login

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)
Copy after login

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!

Related labels:
source:php.cn
Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!