【笔记】PHP的序列化和反序列化

前言

PHP的序列化和反序列化

序列化

  • 序列化只能保存类的属性,不能保存类的方法
1
$字符串 = serialize($对象名);

对象示例

对象中包公有的属性

1
2
3
4
5
6
class User {
public $key = 'value';
}
$user = new User();
$str = serialize($user);
echo $str;
1
O:4:"User":1:{s:3:"key";s:5:"value";}

对象中包含受保护的属性

  • 如果对象中包含受保护的属性,则序列化后的属性值为%00*%00属性名
1
2
3
4
5
6
class User {
private $key = 'value';
}
$user = new User();
$str = serialize($user);
echo $str;
1
O:4:"User":1:{s:3:"key";s:8:"*value";}

对象中包含私有的属性

  • 如果对象中包含私有的属性,则序列化后的属性值为%00类名%00属性名
1
2
3
4
5
6
class User {
private $key = 'value';
}
$user = new User();
$str = serialize($user);
echo $str;
1
O:4:"User":1:{s:3:"key";s:11:"Uservalue";}

数组对象示例

1
2
3
4
5
6
class User {
public $key = 'value';
}
$user = [new User(),new User()];
$str = serialize($user);
echo $str;
1
a:2:{i:0;O:4:"User":1:{s:3:"key";s:5:"value";}i:1;O:4:"User":1:{s:3:"key";s:5:"value";}}

反序列化

1
$对象名 = unserialize($字符串);

完成

参考文献

哔哩哔哩——千锋教育网络安全学院
哔哩哔哩——xiaodisec