当前位置: 首页 > article >正文

PHP反序列化1(基础入门)

考点1:反序列化基础

<aside> 💡

序列化格式

</aside>

对象类型: 对象名长度:”对象名”:对象成员变量个数:{变量1类型:变量名1长度:变量名1; 参数1类型:参数1长度:参数1; 变量2类型:变量名2长度:”变量名2”; 参数2类型:参数2长度:参数2;… …}

如:O:6:”Person”:2:{s:12:” Person name”;s:8:”Thinking”;s:11:” Person sex”;s:3:”man”;} a:2:{s:4:”name”;s:8:”Thinking”;s:3:”sex”;s:3:”man”;}

**对象类型:**Class-O,Array-a。

**变量和参数类型:**string-s,int-i,Array-a,指针引用-R。

**序列符号:**参数与变量之间用分号(;)隔开,同一变量和同一参数之间的数据用冒号(:)隔开。

类型结构
字符串s:size:value;
整数i:value;
布尔值b:value;(保存1或0)
空值N;
数组a:size:{key definition;value definition;(repeated per element)}
对象O:strlen(object name):object name:object size:{s:strlen(property name):property name:property definition;(repeated per property)}
指针引用R:2;

<aside> 💡

三种访问控制的区别

</aside>

public: 变量名

protected: \x00 + * + \x00 + 变量名(或 \00 + * + \00 + 变量名 或 %00 + * + %00 + 变量名)

private: \x00 + 类名 + \x00 + 变量名(或 \00 + 类名 + \00 + 变量名 或 %00 + 类名 + %00 + 变量名)

注:>=php v7.2 反序列化对访问类别不敏感(protected -> public)

<aside> 💡

魔术方法

</aside>

魔术方法触发条件
__call调用不可访问或不存在的方法时被调用 __call($name, $args)
__callStatic调用不可访问或不存在的静态方法时被调用
__clone进行对象clone时被调用,用来调整对象的克隆行为
__constuct构建对象的时被调用
__debuginfo当调用var_dump()打印对象时被调用(当你不想打印所有属性)适用于PHP5.6版本
__destruct明确销毁对象或脚本结束时被调用;
__get读取不可访问或不存在属性时被调用
__invoke当以函数方式调用对象时被调用
__set当给不可访问或不存在属性赋值时被调用
__set_state当调用var_export()导出类时,此静态方法被调用。用__set_state的返回值做为var_export的返回值。
__sleep当使用serialize时被调用,当你不需要保存大对象的所有数据时很有用
__toString当一个类被转换成字符串时被调用
__unset对不可访问或不存在的属性进行unset时被调用
__wakeup当使用unserialize时被调用,可用于做些对象的初始化操作


http://www.kler.cn/news/327833.html

相关文章:

  • 单片机内存保护-MPU(Memory Protection Unit)
  • 【最新华为OD机试E卷-支持在线评测】字符串变换最小字符串(100分)多语言题解-(Python/C/JavaScript/Java/Cpp)
  • CSS | 面试题:你知道几种移动端适配方案?
  • Git常用方法——详解
  • 【解密 Kotlin 扩展函数】扩展属性与扩展函数类似(十九)
  • 网络协议 TCP、UDP 和 HTTP
  • 解决QWidget及内部控件只能放大不能缩小的问题
  • Vscode: reason: oom, code: -536870904
  • VBA数据库解决方案第十五讲:Recordset集合中单个数据的精确处理
  • 【无标题】observer: error while loading shared libraries: libmariadb.so.3处理办法
  • 以串口接口为例介绍关于BSP底层架构开发的迭代过程
  • LeetCode 983.最低票价
  • 前端面试:项目细节重难点问题分享(17)
  • 无环SLAM系统集成后端回环检测模块(loop):SC-A-LOAM以及FAST_LIO_SLAM
  • 基于MTK7981平台,学习了解理解SoC上电和boot流程
  • Thinkphp/Laravel基于vue的的出版社书籍阅读管理系统
  • Docker笔记-Docker磁盘空间清理
  • c#中的功能优势
  • 【QT Quick】基础语法:文件定义类型与枚举类型
  • 最大正方形 Python题解
  • windows下安装nginx和基本配置
  • cfg80211是怎么配置无线设备的AP的?
  • Python与MongoDB交互
  • 《一本书讲透Elasticsearch》读书笔记-索引
  • 2024年主流前端框架的比较和选择指南
  • 【学术会议征稿】2024年遥感技术与图像处理国际学术会议(RSTIP 2024)
  • taro RN 左右滑动切换页面
  • 自动驾驶 3DGS 学习笔记
  • 接口性能优化日记
  • Java高级Day51-apacheDBUtils