序列化与反序列化

序列化

serialize()

<?php
class people{
    public $name;
    public $age;
}
$george = new people();
$george->name ='george';
$george->age = 10;
echo serialize($george);
//输出结果
O:6:"people":2:{s:4:"name";s:6:"george";s:3:"age";i:10;}
//其中O为被序列化变量类型
//6为对象名长度
//2有两个成员变量
//s字符串类型
//4个字符
  • a - 数组
  • b - 布尔
  • d - 浮点(double)
  • i - i整数
  • o - 普通对象
  • r - 引用
  • s - 字符串
  • C - 传统对象
  • O - 类
  • N - 空
  • R - 指针引用
  • U - unicode字符串

反序列化

unserialize()

魔术函数

						__construct() 当一个对象创建时被调用,
						__destruct() 当一个对象销毁时被调用,
						__toString() 当一个对象被当作一个字符串被调用。
						__wakeup() 使用unserialize时触发
						__sleep() 使用serialize时触发
						__destruct() 对象被销毁时触发
						__call() 在对象上下文中调用不可访问的方法时触发
						__callStatic() 在静态上下文中调用不可访问的方法时触发
						__get() 用于从不可访问的属性读取数据
						__set() 用于将数据写入不可访问的属性
						__isset() 在不可访问的属性上调用isset()``empty``()触发
						__unset()  在不可访问的属性上使用unset()时触发
						__toString() 把类当作字符串使用时触发,返回值需要为字符串
						__invoke() 当脚本尝试将对象调用为函数时触发

其中__destruct()与__wakeup()常作为多个对象互相调用的入口

绕过__wakeup()
  • php5<5.6.25或者php7<7.0.10
    反序列化中属性个数值大于真实属性个数值时,会绕过__wakeup() 即不执行__wake(),但反序列化会失败.
调用__toString()
  • 在将对象为字符串时,调用__toString()
  • 输出时
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值