PHP--序列化与反序列化详解

博客说明

文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢!

说明

学到网络安全的时候用到了序列化和反序列化的操作,感觉挺有用的,首先给出文档地址https://www.php.net/manual/zh/language.oop5.serialization.php

所有php里面的值都可以使用函数serialize()来返回一个包含字节流的字符串来表示。unserialize()函数能够重新把字符串变回php原来的值。 序列化一个对象将会保存对象的所有变量,但是不会保存对象的方法,只会保存类的名字。

为了能够unserialize()一个对象,这个对象的类必须已经定义过。如果序列化类A的一个对象,将会返回一个跟类A相关,而且包含了对象所有变量值的字符串。 如果要想在另外一个文件中解序列化一个对象,这个对象的类必须在解序列化之前定义,可以通过包含一个定义该类的文件或使用函数spl_autoload_register()来实现。

PHP序列化:serialize

序列化是将变量或对象转换成字符串的过程。

<?phpclass student{public $name;public $age;public $number;//_construct:创建对象时初始化function __construct($name,$age,$number){        $this->name = $name;$this->age = $age;$this->number = $number;}
}$student = new student("Jack",22,11086);
var_dump(serialize($student));?>

测试运行

string(76) "O:7:"student":3:{s:4:"name";s:4:"Jack";s:3:"age";i:22;s:6:"number";i:11086;}"

PHP反序列化:unserialize

反序列化是将字符串转换成变量或对象的过程。

<?phpclass student{public $name;public $age;public $number;//_construct:创建对象时初始化function __construct($name,$age,$number){        $this->name = $name;$this->age = $age;$this->number = $number;}
}$student = 'O:7:"student":3:{s:4:"name";s:4:"Jack";s:3:"age";i:22;s:6:"number";i:11086;}';
var_dump(unserialize($student));?>

测试运行

object(student)#1 (3) {["name"]=>string(4) "Jack"["age"]=>int(22)["number"]=>int(11086)
}

魔术函数

函数 说明 __construct() 类的构造函数 __destruct() 类的析构函数 __call() 在对象中调用一个不可访问方法时调用 __callStatic() 用静态方式中调用一个不可访问方法时调用 __get() 获得一个类的成员变量时调用 __set() 设置一个类的成员变量时调用 __isset() 当对不可访问属性调用isset()或empty()时调用 __unset() 当对不可访问属性调用unset()时被调用 __sleep() 执行serialize()时,先会调用这个函数 __wakeup() 执行unserialize()时,先会调用这个函数 __toString() 类被当成字符串时的回应方法 __invoke() 调用函数的方式调用一个对象时的回应方法 __set_state() 调用var_export()导出类时,此静态方法会被调用 __clone 当对象复制完成时调用 __autoload() 尝试加载未定义的类 __debugInfo() 打印所需调试信息

为什么突然说到魔术函数呢,因为在序列化和反序列化的时候经常会用到__construct()__destruct()__sleep()__wakeup()

在后面的博客里面有相应的ctf实例

感谢

万能的网络

以及勤劳的自己

php中对象怎么访问i属性_PHP--序列化与反序列化详解相关推荐

  1. Java对象序列化详解6,Java对象的序列化与反序列化详解

    把对象转换为字节序列的过程称为对象的序列化,把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种途径: Ⅰ . 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中 Ⅱ.  在网 ...

  2. 对象的序列化与反序列化详解

    [1] 序列化与反序列化 如果我们需要持久化 Java 对象比如将 Java 对象保存在文件中,或者在网络传输 Java 对象,这些场景都需要用到序列化. 简单来说: 序列化:将数据结构或对象转换成二 ...

  3. 不同派生方式下基类成员在派生类中的可访问范围属性

    不同派生方式下基类成员在派生类中的可访问范围属性 派生方式 派生方式 派生方式 基类成员 公有派生 私有派生 保护派生 私有成员 不可访问 不可访问 不可访问 保护成员 保护 私有 保护 公有成员 公 ...

  4. 第7.26节 Python中的@property装饰器定义属性访问方法getter、setter、deleter 详解

    第7.26节 Python中的@property装饰器定义属性访问方法getter.setter.deleter 详解 一.    引言 Python中的装饰器在前面接触过,老猿还没有深入展开介绍装饰 ...

  5. js sort方法根据数组中对象的某一个属性值进行排序(实用方法)

    js sort方法根据数组中对象的某一个属性值进行排序 sort方法接收一个函数作为参数,这里嵌套一层函数用来接收对象属性名,其他部分代码与正常使用sort方法相同. var arr = [{name ...

  6. js根据数组中对象的多个属性值进行排序

    js根据数组中对象的多个属性值进行排序 seatList.sort(function (a, b) {if (a['ordinate'] === b['ordinate']) {if (a['absc ...

  7. java数组按某个值排序_Js--使用sort根据数组中对象的某一个属性值进行排序

    现货深度学习之tensorflow原理样本 87.45元 包邮 (需用券) 去购买 > Js--使用sort根据数组中对象的某一个属性值进行排序 博客说明 文章所涉及的资料来自互联网整理和个人总 ...

  8. 微信小程序使用setData方法修改data中对象或数组的属性值

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到网站 微信小程序使用setData方法修改data中对象或数组的属性值 使用微信小程序开发时,涉及到data ...

  9. python的继承用法_【后端开发】python中继承有什么用法?python继承的用法详解

    本篇文章给大家带来的内容是关于python中继承有什么用法?python继承的用法详解,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 面向对象三大特征 1.封装:根据职责将属性和方法 ...

最新文章

  1. hppRNA-基于Snakemake的便捷无参数管道,可用于众多样品的RNA-Seq分析
  2. 梦境交互:做个现代灵媒,考虑一下?
  3. 2011 总结 2012 计划
  4. NetDevOps — NETCONF 协议
  5. python字符串大写字母个数_python判断字符串是字母 数字 大小写(转载)
  6. 【Maven学习笔记(二)】Maven的安装与配置
  7. 专访余承东:华为引领行业进步 折叠屏手机即将上市
  8. 拳王虚拟项目公社:2020主流的虚拟资源项目,最新最全自动化系统玩法
  9. 【python】命令行参数argparse用法详解
  10. Java课程设计- 记事本代码
  11. Steam WIN+R喜加一游戏管理工具 Steam Code Manager
  12. pcb板生产的工艺流程有哪些?
  13. 有源蜂鸣器与无源蜂鸣器的驱动方式详解(精华版)
  14. 第三方银联支付接口对接_php版银联支付接口开发简明教程
  15. 从0开始学习scrapy框架——(六)item的实例——阳光政务平台爬虫
  16. matlab 自动对焦,一种基于双摄像头的自动对焦方法与流程
  17. turtle(海龟)库的使用
  18. html鼠标经过图片放大
  19. export PATHONPATH的用法
  20. 织梦banner图后台添加

热门文章

  1. matlab 中fft的用法
  2. [hdu1847]博弈,推理
  3. Fragment间的通信
  4. 批量离线下载迅雷快传资源
  5. 职场不设限:真正的AI产品经理太少了……
  6. 人不会一直寂寞,匿名社交也不会一直活跃?
  7. ThreadLocal实践
  8. WEB Struts2 中OGNL的用法
  9. Oracle技术之OCRCONFIG工具
  10. Android 开机自动运行和添加删除桌面快捷方式