简介

在 PHP 中将对象、数组、变量等转化为字符串,这样便于将数据保存到数据库或者文件中,这个过程称之为序列化。当需要使用这些数据时,就需要用反序列化就是将字符串还原回原来的样子,也就是序列化的逆过程。

在 PHP 中序列化与反序列化会用到两个函数

  • serialize 函数 – 序列化函数
  • unserialize 函数 – 反序列化函数
案例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
class test{
var $name = "Lixiney";
var $age = 18;
var $hobby = array("sleep","code","girl");
var $sex;

function __construct(){
$this -> sex = "male";
}

public function sayHello(){
echo "Hello world";
}

function __destruct(){
//析构函数
}
}

$user = new test();

echo serialize($user);

?>

输出结果 :

1
O:4:"test":4:{s:4:"name";s:7:"Lixiney";s:3:"age";i:18;s:5:"hobby";a:3:{i:0;s:5:"sleep";i:1;s:4:"code";i:2;s:4:"girl";}s:3:"sex";s:4:"male";}

O 表示 对象类型 Object

s 表示字符串 string

i 表示整形 int

a 表示数组类型 array

反序列化

使用在线工具

image-20240923102429809

序列化后的内容只有成员变量,没有成员函数

序列化后,如果成员变量的类型是 protected 受保护的类型 ,会在变量名前加上 \x00*\x00

常见的魔术方法

魔术方法 功能
__construct() 构造函数
__destruct() 析构函数,对象销毁时触发
__call() 在对象上下文中调用不可访问的方法时触发
__wakeup() 当对象被执行反序列化时,会先调用这个方法
__sleep() 当对象被执行序列化操作时,会先调用这个方法
__toString() 对象被当成字符串时的回应方法