当前位置:首页 > PHP教程 > php应用 > 列表

PHP序列化数据格式的示例详解

发布:smiling 来源: PHP粉丝网  添加日期:2026-03-25 20:18:59 浏览: 评论:0 

PHP序列化是将PHP变量(包括对象)转换为可存储或传输的字符串表示形式的过程。了解这些序列化格式对于数据处理、调试和安全性分析非常重要。本文将详细介绍PHP中各种数据类型的序列化表示方式。

基本数据类型序列化格式

布尔值(Boolean)

格式:b:<value>

b:1 表示 true

b:0 表示 false

示例:

serialize(true);   // 输出: "b:1"

serialize(false);  // 输出: "b:0"

整数(Integer)

格式:i:<value>

示例:

serialize(42);     // 输出: "i:42;"

serialize(-100);   // 输出: "i:-100;"

浮点数(Float/Double)

格式:d:<value>

示例:

serialize(3.14);   // 输出: "d:3.14;"

serialize(-0.5);   // 输出: "d:-0.5;"

字符串(String)

格式:s:<length>:"<value>";

示例:

serialize("hello"); // 输出: "s:5:"hello";"

serialize("测试");  // 输出: "s:6:"测试";" (UTF-8编码下每个中文字符占3字节)

NULL值

格式:N;

示例:

serialize(null);    // 输出: "N;"

复合数据类型序列化格式

数组(Array)

格式:a:<length>:{<key-value pairs>}

数组的序列化包含以下部分:

数组元素数量

每个元素的键和值序列化表示

示例:

  1. serialize([1, 2, 3]);  
  2. // 输出: "a:3:{i:0;i:1;i:1;i:2;i:2;i:3;}" 
  3.  
  4. serialize(["name" => "John""age" => 30]); 
  5. // 输出: "a:2:{s:4:"name";s:4:"John";s:3:"age";i:30;}" 

对象(Object)

格式:O:<class_name_length>:"<class_name>":<number_of_properties>:{<properties>}

对象序列化包含:

类名长度和类名

属性数量

每个属性的名称和值(包括可见性)

示例:

  1. class User { 
  2.     public $name = "Alice"
  3.     protected $id = 123; 
  4.     private $secret = "xyz"
  5.  
  6. serialize(new User()); 
  7. /* 输出: 
  8. O:4:"User":3:{ 
  9.     s:4:"name";s:5:"Alice"; 
  10.     s:5:"*id";i:123; 
  11.     s:11:"Usersecret";s:3:"xyz"; 
  12. } 
  13. */ 
  14.  

注意:受保护属性前缀为*,私有属性前缀为类名。

特殊类型

引用(Reference)

当序列化包含引用的变量时,PHP会使用引用标记:

格式:R:<reference_number>;

示例:

  1. $a = [1]; 
  2. $b = &$a
  3. serialize([$a$b]); 
  4. // 输出: "a:2:{i:0;a:1:{i:0;i:1;}i:1;R:2;}" 

序列化字符串结构总结

完整的PHP序列化字符串通常具有以下特点:

以数据类型标识符开头(b, i, d, s, a, O, N等)

使用冒号分隔类型和值

字符串值用双引号括起来

使用分号作为终止符

复合类型使用花括号表示嵌套结构

安全注意事项

不要反序列化不可信数据:PHP反序列化可能执行代码(通过__wakeup()或__destruct()魔术方法)

考虑使用JSON进行安全数据传输

对序列化数据进行签名或加密以验证完整性

实用场景

数据存储(如会话、缓存)

进程间通信

对象持久化

调试复杂数据结构

通过理解PHP序列化格式,开发者可以更好地处理数据转换、调试序列化问题和构建安全应用程序。

Tags: PHP序列化数据格式

分享到: