serialize() 将 PHP 变量(数组、对象、标量)转为可存储、可传输的字符串,保留类型与结构;unserialize() 还原。广泛用于 Session、缓存、数据库字段存储复杂结构。本文演示基本用法、对象序列化机制、安全风险与最佳实践。
";
/* 输出:
a:8:{i:0;s:3:"周";i:1;s:3:"满";i:2;s:3:"和";i:3;s:6:"个人";i:4;s:6:"博客";i=5;s:20:"www.jb51.net";i:6;s:9:"周满和";i:7;s:12:"个人博客";}
*/
$c = unserialize($b);
print_r($c); // 还原原数组
?>
["周", "满", "和"],
'name_weburl' => ["周满和", "www.jb51.net"],
'all' => ['周满和个人博客' => 'www.jb51.net']
];
$b1 = serialize($a1);
$c1 = unserialize($b1);
print_r($c1);
?>
id = $id;
$this->name = $name;
$this->pdo = new PDO(/* ... */);
}
// 指定序列化包含哪些属性
public function __sleep() {
return ['id', 'name']; // 排除 $pdo
}
// 反序列化后重建资源
public function __wakeup() {
$this->pdo = new PDO(/* ... */);
}
}
$user = new User(1, 'Simon');
$ser = serialize($user); // 仅含 id、name
$newUser = unserialize($ser); // 自动调用 __wakeup 重建连接
?>
| 标识 | 类型 | 示例 |
|---|---|---|
| a | 数组 | a:3:{i:0;s:3:"foo";i:1;i:123;i:2;d:1.5;} |
| O | 对象 | O:4:"User":2:{s:2:"id";i:1;s:4:"name";s:5:"Simon";} |
| s | 字符串 | s:5:"hello"; |
| i | 整数 | i:42; |
| d | 浮点数 | d:3.14; |
| b | 布尔 | b:1; |
| N | NULL | N; |