PHP序列化总结1--序列化和反序列化的基础知识

序列化和反序列化的作用

1.序列化:将对象转化成数组或者字符串的形式

2.反序列化:将数组或字符串的形式转化为对象

为什么要进行序列化

这种数据形式中间会有很多空格,不同人有不同的书写情况,可能还会出现换行的情况

为此为了方便数据传输,我们可以进行序列化操作将其变为一个字符串的形式进行传输

案例分析

我们在写PHP代码的时候会写到类这种数据形式

<?php
class demotest{
	public $name='xiaodi';
	public $sex='man';
	public $age=29;
	public $arr=array('abc',123,'demo');
}
$dd=new demotest();
echo serialize($dd);

类似于这样,原来的数据中就有很多的空格、换行、缩进等额外的数据,这些数据没有用,而且不同人写代码的习惯不同,这些东西都会有差异,而且不可避免在传输过程中可能会产生错误,为此,绕过将数据进行了序列化,就会将传输的数据以统一的格式进行传输,这样就比较规范而且减少出错的概率。

因此为了保证数据传递的效率和正确性,我们可以把数据进行序列化后进行传输

 序列化后各字段的含义

 O:表示的是序列化一个对象,8是对象名称的长度,3 表示有3个属性 s表示第一个属性是字符串类型 4 表示的是第一个属性的字符串长度 name是第一个属性的属性名称,以分号结尾,s表示对象的属性为字符串,长度是6,值为xiaodi,后面的以此类堆......对象的属性相关信息都使用 {}括起来,当然对于数组这样复杂的数据结构我们直接进行输出查看格式内容即可

序列化的内容是什么

序列化只序列化成员变量,不序列化成员函数

案例分析
<?php
class a{
	public $username='xxxxxx';
	public $password='xxxxxx';
	public function daying(){
		echo 'hello';
	}
	public function __destruct(){
	echo 'over';
	}
}
$aa= new a();
echo serialize($aa);

我们在序列化的时候一个类中可能有属性也会有方法,但是我们在序列化的时候只会序列化一个对象的属性,不会序列化对象的方法。如图,我们定义的类a中有username和password两个属性,也有daying()和__destruct()两个方法,我们可以看到在序列化后a对象中之序列化了两个属性,为此两个方法并没有被序列化,输出的over是因为触发了destruct()方法打印出来的结果,与序列化无关(ps:主要是说明序列化只要是函数都不会被序列化)

反序列化--将序列化的数据还原成对象

将序列化的数据还原成对象

反序列化后的对象里面的值是反序列化里面的值决定,与原来的预定义的值无关--通过反序列化我们可以修改原来类中属性的值

<?php
class demotest{
	public $a='hello';
	public function demo(){
		echo $this->a;
	}	
}
$dd=new demotest();
echo(serialize($dd));
$ee='O:8:"demotest":1:{s:1:"a";s:5:"nihao";}';
$ff=urldecode($ee);
$gg= unserialize($ff);
$gg->demo();

本来在demodest中a的值是hello,但是我们通过反序列化将a的值改为nihao后,输出的中值改为了nihao

公有属性和私有属性

在进行反序列化的过程中,对用私有属性,受保护的属性,公有属性来说其反序列化后的结果是不相同。具体结果如图所示

<?php
class demo{
	public $name="demo";
	private $sex="man";
	protected $age=18;
	
	}
$d=new demo();
echo serialize($d);
?>

对于一个对象来说它的公有属性序列化后的属性名还是原来的字符串

对于一个对象来说它的私有属性序列化后的属性名是%00+类名+%00+属性名

对于一个对象来说它的受保护的属性序列化后的属性名是 %00+*+%00+属性名

写在最后

如有错误,请及时指出,感谢

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/280241.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++】STL 容器 - set 集合容器 ⑦ ( 查找元素 - set#find 函数 | 获取元素个数 - set#count 函数 )

文章目录 一、查找元素 - set#find 函数1、函数原型 简介2、代码示例 - set#find 函数 二、获取元素个数 - set#count 函数1、函数原型 简介2、代码示例 - set#find 函数 一、查找元素 - set#find 函数 1、函数原型 简介 在 C 语言的 STL 标准模板库 , std::set 集合容器 是一个…

软件测试/测试开发丨Python 内置库 OS 学习笔记分享

os 概述 os: Operating System os 使用 导入 os 模块 查看 os 模块使用文档 help(os)dir(os) import os# 查看os模块说明文档 help(os)# 查看os模块的属性和方法 print(dir(os))os 操作系统相关 os.name&#xff1a;获取系统名称os.environ&#xff1a;获取系统环境变量信…

西北工业大学计算机组成原理实验报告——verilog后两次

在单周期CPU的基础上开发实现流水线CPU 说明&#xff1a; 1. 该PDF带有大纲功能&#xff0c;点击大纲中的对应标题&#xff0c;可以快速跳转。 2. 目录层级为&#xff1a; 一、一级标题 &#xff08;二&#xff09;二级标题 &#xff08;3&#xff09;三级标题 4.四级标…

Stable Diffusion Webui在Linux服务器第一次运行不能连接huggingface

第一次运行stable-diffusion-webui出现了如下错误 (MaxRetryError("HTTPSConnectionPool(hosthuggingface.co, port443): Max retries exceeded with url: /openai/clip-vit-large-patch14/resolve/main/vocab.json (Caused by ConnectTimeoutError(<urllib3.connecti…

亚信安慧AntDB数据库两项目分别入选2023“星河”标杆、优秀案例

近日&#xff0c;由中国信息通信研究院、中国通信标准化协会大数据技术标准推进委员会&#xff08;CCSA TC601&#xff09;共同组织的第七届大数据“星河&#xff08;Galaxy&#xff09;”案例评选结果公示&#xff0c;亚信安慧AntDB数据库两项目入选&#xff0c;其中“基于Ant…

C单片机数据类型与格式化

C语言数据类型 关键字位数表示范围stdint关键字ST关键字举例unsigned char80 ~ 255uint8_tu8u8 data 128char8-128 ~ 127int8_ts8s8 temperature 25unsigned short160 ~ 65535uint16_tu16u16 counter 5000short16-32768 ~ 32767int16_ts16s16 position 32767unsigned int3…

基于C#串口通信的智能仪表充电管理系统

基于C#串口通信的智能仪表充电管理系统 谁要源码的话加入群聊收费50元。提供代码&#xff0c;加QQ66987475。 一、 系统描述 该系统管理矿用检测仪器的充电、领取、归还、考勤等基本功能&#xff0c;一套系统拓补图如下&#xff1a; 由上位机、打印机、大屏幕、人脸识别仪…

腾讯云轻量应用服务器是什么?详细介绍

腾讯云轻量应用服务器开箱即用、运维简单的轻量级云服务器&#xff0c;CPU内存带宽配置高并且价格特别便宜&#xff0c;大带宽&#xff0c;但是限制月流量。轻量2核2G3M带宽62元一年、2核2G4M优惠价118元一年&#xff0c;540元三年、2核4G5M带宽218元一年&#xff0c;756元3年、…

力扣:62. 不同路径(动态规划,附python二维数组的定义)

题目&#xff1a; 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少条不同的路径&…

mxxWechatBot微信机器人V2版本文档说明

大家伙&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。 先看这里 一、前言二、mxxWechatBot流程图三、怎么使用&#xff1f; 一、前言 经过不断地探索与研究&#xff0c;mxxWechatBot正式上线&#xff0c;届时全面开放使用。 mxxWechatBot&am…

goframe v2 模板引擎的用法

这里用的goframe v2框架 提醒&#xff1a;下面的import 引入的控制器和api&#xff0c;根据自己实际项目路径 main函数 import ("context""github.com/gogf/gf/v2/net/ghttp""github.com/gzdzh/dzhgo/modules/dzhCms/controller/web""gith…

C/C++ BM3 链表中的节点每k个一组翻转

文章目录 前言题目思路阐述代码总结 前言 这道题的关键是理解链表指针的位置&#xff1b; 在BM2的区间翻转基础上&#xff0c;多了个指针偏移&#xff0c;博客里面我贴图阐述一下。 题目 思路阐述 这道题的翻转过程参考BM2的题解&#xff0c;这里主要阐述一下指针移动和整体思…

测试C#调用ZXing.Net识别图片中的条形码

微信公众号“dotNET跨平台”的文章《.NET 使用 ZXing.Net 生成二维码&#xff0c;并识别》中介绍了使用ZXing.Net库创建并识别条形码的方式&#xff0c;该库除了能生成二维码、PDF 417、EAN、UPC、Aztec等条形码外&#xff0c;还能从图片中识别条形码内容&#xff0c;本文学习并…

04-获取认证的用户身份信息

存储用户信息的方式 获取用户信息的流程 用户提交账号和密码后,DaoAuthenticationProvider调用UserDetailsService接口实现类的loadUserByUsername()方法,该方法可以接收请求参数username的值,然后根据该值查询用户信息,最后将账号,密码,权限封装到UserDetails对象中并返回给…

linux常见基础指令

入门常见基础指令 ls、stat、 pwd 、cd、tree、 whoami、 touch、 mkdir、 rm 、 man、 cp、mv、cat、tac、echo、>、 >>、 < 、more、 less、 head、 tail、date、 cal、 find、 which、alias、whereis、grep、zip与unzip、 tar、bc、uname、xargs... 热键Tab、…

DrGraph原理示教 - OpenCV 4 功能 - 颜色空间

前言 前段时间&#xff0c;甲方提出明确需求&#xff0c;让把软件国产化。稍微研究了一下&#xff0c;那就转QT开发&#xff0c;顺便把以前的功能代码重写一遍。 至于在Ubuntu下折腾QT、OpenCV安装事宜&#xff0c;网上文章很多&#xff0c;照猫画虎即可。 这个过程&#xff0…

金蝶云星空业务对象扩展

文章目录 金蝶云星空业务对象扩展 金蝶云星空业务对象扩展 当前对象已经存在扩展不允许再次扩展。 一般来说&#xff0c;不允许同级多次扩展。因为同级扩展会出现界面元素冲突的情况。 但是通过不同应用扩展部署到环境的&#xff0c;允许一个开发商只能扩展一次标准产品。 不过…

页面布局--Flexbox的自动边距

标题页面布局–Flexbox的自动边距 通过简单的margin:auto&#xff0c;我们就能实现元素的多种对齐方式。 假设我们在盒子模型里有四个元素&#xff1a; 先给容器使用flex布局&#xff1a; .container {display: flex;justify-content: flex-start;align-items: center;gap: 6…

{MySQL}索引事务和JDBC

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、索引1.1索引是什么1.2作用1.3代码 二、事务2.1什么是事务2.2使用 三.JDBC总结 前言 接着上次&#xff0c;继续讲下MySQL 提示&#xff1a;以下是本篇文章正…

第六课:冷战和消费主义、个人计算机革命、图形用户界面(GUI)及3D图形

第六课&#xff1a;冷战和消费主义、个人计算机革命、图形用户界面&#xff08;GUI&#xff09;及3D图形 第二十四章&#xff1a;冷战和消费主义本课概括&#xff1a;政府和消费者推动了计算机的发展 第二十五章&#xff1a;个人计算机革命本集概括&#xff1a;继续讲计算机发展…