PHP序列化——基本格式

本文介绍了PHP代码序列化的基本格式,包括O标识的序列化对象、类名长度、类名、属性数量、属性列表及其详细结构。特别提到了protected和private属性在序列化时的命名规则,并指出属性名长度中可能存在的不可见字符。内容源于网络,欢迎指正。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

php代码序列化后的基本格式如下

O:<length>:"<class name>":<n>:{
<field type 1>:<field length 1>:"<field name 1>";<field value type 1>:<field value 1>;
...
<field type n>:<field length n>:"<field name n>";<field value type n>:<field value n>;} 

O:表示序列化的事对象
< length>:表示序列化的类名称长度
< class name>:表示序列化的类的名称
< n >:表示被序列化的对象的属性个数
{…………}:属性列表
< field type >:属性类型
< field length >:属性名长度
< field name >:属性名
< field value type >:属性值类型
< field value >:属性值


其中,protected类型的属性,其名称默认" *+属性名 ",private 类型的属性,名称默认“ 类名+属性名 ”。
另外,它们的< field length >与目测长度不符,实际上,它们中间有两个不可见字符%00

"Testc" = “%00Test%00c”
"*c" = “%00*%00c”



例:
<?php
class Test{
    public $a;
    protected $b;
    private $c;
    var $d;
    static $e;
    function __construct(){
        $this->a=$this->b=$this->c=$this->d=$this->e=1;
    }
}

$t=new Test();
echo(serialize($t));
>

/* O:4:"Test":5:{s:1:"a";i:1;s:4:"*b";i:1;s:7:"Testc";i:1;s:1:"d";i:1;s:1:"e";i:1;} */

咱只是一个贼菜的鶸,也没看过相关的书,以上内容是总结自下面两个地方的,如有错误,希望大佬们能够指出。

参考:
https://blog.youkuaiyun.com/weixin_45689999/article/details/104608039
https://www.bilibili.com/video/BV1Z54y1U7up

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值