php序列化示例代码
<?php
class Person {
    public $name = "Tom";
    private $age = 18;
    protected $sex = "male";
    public function hello() {
        echo "hello";
    }
}
$class = new Person();
$class_ser = serialize($class);
echo $class_ser;
?>

输出:

O:6:"Person":3:{s:4:"name";s:3:"Tom";s:11:"Personage";i:18;s:6:"*sex";s:4:"male";}
  • 其中,从前往后依次为:O代表object,如果是数组则是 i;6代表对象名长度;Person是对象名;3是对象里面的成员变量的数量;括号里面 s 代表 string 数据类型,如果是 i 则代表 int 数据类型;4代表 属性名的长度;name即属性名;s同前面;3 代表属性值长度;Tom即属性值,后面同理(数字不显示长度)。同时注意到类里面的方法并不会序列化。
  • 根据成员变量的的修饰类型不同,在序列化中的表示方法也有所不同。可以看到代码中三个修饰类型分别是public、private、protected。

  • public,没有变化
  • private,会变成 %00类名%00属性名
  • protected,会变成 %00*%00属性名

%00为空白符,空字符也有长度,一个空字符长度为 1,%00 虽然不会显示,但是提交还是要加上去。

  • 总结:一个类经过序列化之后存储在字符串的信息只有 类名称 和 类内成员属性键值对,序列化字符串中没有将类方法一并序列化。