
PHP序列化数据格式是一种将复杂数据结构(如数组、对象)转换为可存储或传输的字符串表示的机制,其核心作用是实现数据持久化与跨环境交互。本文将系统解析其格式规则、操作示例及关键注意事项。
PHP序列化遵循严格的结构化语法,不同类型数据对应特定前缀标识:字符串以"s"开头,后接长度与内容;整数用"i",布尔值用"b"(1为真0为假),浮点数用"d",空值用"N";数组以"a"标记,后接元素总数及键值对序列化串;对象以"O"标识,包含类名长度、类名、属性数及属性序列化数据。
// 基本类型序列化示例 $str = "PHP序列化"; $int = 2024; $bool = true; $null = null; $float = 3.14; echo serialize($str); // s:10:"PHP序列化"; echo serialize($int); // i:2024; echo serialize($bool); // b:1; echo serialize($null); // N; echo serialize($float); // d:3.14;
// 数组序列化与反序列化
$data = [
"name" => "示例",
"values" => [1, 2, 3],
"active" => false
];
$serialized = serialize($data);
echo $serialized;
// a:3:{s:4:"name";s:6:"示例";s:6:"values";a:3:{i:0;i:1;i:1;i:2;i:2;i:3;}s:6:"active";b:0;}
$restored = unserialize($serialized);
print_r($restored); // 还原为原始数组结构// 对象序列化(需类定义)
class User {
public $id = 1001;
public $role = "admin";
}
$user = new User();
$obj_serialized = serialize($user);
echo $obj_serialized;
// O:4:"User":2:{s:2:"id";i:1001;s:4:"role";s:5:"admin";}
$user_restored = unserialize($obj_serialized);
var_dump($user_restored); // 还原为User对象实例使用PHP序列化需注意:反序列化可能触发对象构造函数或魔术方法,存在安全风险(如恶意构造序列化串执行代码),需严格校验输入源;反序列化前必须确保相关类已定义,否则返回__PHP_Incomplete_Class对象;不同PHP版本间序列化格式可能存在细微差异,跨版本传输需谨慎。
综上,PHP序列化通过标准化字符串格式实现数据结构转换,适用于缓存存储、会话共享等场景,但需平衡便利性与安全性,避免滥用导致漏洞。