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

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+属性名

写在最后

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

相关文章:

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

序列化和反序列化的作用 1.序列化&#xff1a;将对象转化成数组或者字符串的形式 2.反序列化&#xff1a;将数组或字符串的形式转化为对象 为什么要进行序列化 这种数据形式中间会有很多空格&#xff0c;不同人有不同的书写情况&#xff0c;可能还会出现换行的情况 为此为了…...

【Linux】 last 命令使用

last 命令 用于检索和展示系统中用户的登录信息。它从/var/log/wtmp文件中读取记录&#xff0c;并将登录信息按时间顺序列出。 著者 Miquel van Smoorenburg 语法 last [-R] [-num] [ -n num ] [-adiox] [ -f file ] [name...] [tty...]last 命令 -Linux手册页 选项及作用…...

Git 分布式版本控制系统(序章1)

第一章 Git 分布式版本控制系统 为什么学Git? 某些企业面试需要掌握Git&#xff0c;同时&#xff0c;也方便管理自己的Qt项目。 一、Git 客户端下载&#xff08;Windows&#xff09; 下载地址 https://gitee.com/all-about-git#git-%E5%A4%A7%E5%85%A8 二、Git 的特点 分支…...

给WordPress网站添加返回顶部按钮

给WordPress网站底部添加一个按钮&#xff0c;点它就可以现实快速返回到顶部。有两种方法可以现实&#xff0c;一种是通过安装相关插件来实现。另外一种方式就是以纯属代码的方式来实现。 给WordPress网站底部添加一个按钮&#xff0c;点它就可以现实快速返回到顶部。有两种方…...

App Inventor 2 接入短信服务,实现短信验证码功能

发送短信验证码功能一般都是基于短信平台提供的sdk进行调用&#xff0c;这里是基于阿里云短信平台进行的开发&#xff0c;阿里云短信平台接入步骤请点此参考。 App Inventor 2拓展提供的函数如下&#xff1a; 主要提供2个函数&#xff0c;生成随机位数的数字随机码 和 发送短信…...

Linux环境grep搜索方法记录

1 grep grep 命令&#xff0c;用来搜索字符串所在位置&#xff0c;可以具体到不同文件&#xff0c;不同行&#xff1b; 在Linux 下&#xff0c;查看命令释义如下 zhaocubuntu2004:~$ grep --help Usage: grep [OPTION]... PATTERNS [FILE]... Search for PATTERNS in each FI…...

C语言-破解密码

题目描述 密码是我们生活中非常重要的东东&#xff0c;我们的那么一点不能说的秘密就全靠它了。哇哈哈. 接下来渊子要在密码之上再加一套密码&#xff0c;虽然简单但也安全。 假设老王原来一个BBS上的密码为zvbo941987,为了方便记忆&#xff0c;他通过一种算法把这个密码变换…...

ffmpeg 解码文件时的时间戳问题

实时流和普通文件 1 实时流 实时流编码时&#xff0c;我们一般不进行b帧编码&#xff0c;但是文件存储时为了减小大小&#xff0c;会增加b帧&#xff0c;实时流只带了I&#xff0c;P帧&#xff0c;那就会好很多 2 普通文件 很多文件带了b帧&#xff0c;所以要使用解码时间去同…...

Java企业电子招投标系统源代码,支持二次开发,采用Spring cloud框架

在数字化采购领域&#xff0c;企业需要一个高效、透明和规范的管理系统。通过采用Spring Cloud、Spring Boot2、Mybatis等先进技术&#xff0c;我们打造了全过程数字化采购管理平台。该平台具备内外协同的能力&#xff0c;通过待办消息、招标公告、中标公告和信息发布等功能模块…...

[python]基于faster whisper实时语音识别语音转文本

语音识别转文本相信很多人都用过&#xff0c;不管是手机自带&#xff0c;还是腾讯视频都附带有此功能&#xff0c;今天简单说下&#xff1a; faster whisper地址&#xff1a; https://github.com/SYSTRAN/faster-whisperhttps://link.zhihu.com/?targethttps%3A//github.com…...

2023纠结中前行? 2024继续还是放下?

喝下2023年的第一口雪碧&#xff0c;没有想像中的那么期待&#xff0c;甜水&#xff0c;放弃吧&#xff1b;还是吃些水果吧&#xff0c;不行吃块肉、喝两口酒~ 关于生活 挣扎了10几年的一颗牙“终于“掉了&#xff0c;几个月时间都在为新牙努力着&#xff1b;”进了医院就不在…...

原型链补充

1.什么是原型对象 函数的独有属性,他用prototype来表示,可以在函数的prototype上挂载一些公用的属性和方法,供实例化对象来访问。 2.__proto__属性 这个属性每一个对象都有,实例化对象就是通过这个属性,来访问原型对象上的属性和方法的。 3.三者之间的关系 1.在构造函数的原型…...

《Linux Nano命令详解:小而强大的文本编辑器》

《Linux Nano命令详解&#xff1a;小而强大的文本编辑器》 引言&#xff1a; 在Linux系统中&#xff0c;文本编辑是开发和系统管理中不可或缺的一部分。虽然有许多强大的文本编辑器可供选择&#xff0c;但Nano以其简单易用、小巧灵活而备受喜爱。本文将深入探讨Nano命令&…...

系列四、Eureka自我保护

一、Eureka自我保护 1.1、故障现象 保护模式主要用于一组客户端和Eureka Server之间存在网络分区场景下的保护。一旦进入保护模式&#xff0c;Eureka Server将会尝试保护其服务注册表中的信息&#xff0c;不再删除服务注册表中的数据&#xff0c;也就是不会注销任何微服务。如…...

C++回调函数-实操(二)

回调通常通过函数指针、函数对象&#xff08;仿函数&#xff09;、Lambda 表达式或者 std::function 来实现。 1、函数指针实现回调 这一方法实现回调比较好记&#xff0c;就记住把函数当作参数传给方法&#xff0c;在方法中调用方法。 #include <iostream>// 回调函数…...

MySQL中常用的用户授权操作

mysql 用户授权 1 &#xff09;概述 让每个应用程序&#xff0c;单独开一个mysql的用户权限所有mysql用户存储在 mysql库的user表中 2 ) 多种用户授权方式示例 show databases; use mysql;select user, authentication_string, host from mysql.user;-- 创建和删除用户 -- c…...

LabVIEW开发智能火灾自动报警系统

LabVIEW开发智能火灾自动报警系统 系统基于LabVIEW虚拟仪器开发&#xff0c;由火灾报警控制器、感温感烟探测器、手动报警器、声光报警器、ZigBee无线通讯节点以及上位机电脑等组成&#xff0c;展示了LabVIEW在智能化火灾预警与控制方面的应用。该系统通过结合二总线协议和Zig…...

Vagrant使用教程

vmware下载地址&#xff1a;https://www.vmware.com/products/workstation-pro/workstation-pro-evaluation.html VirtualBox下载地址&#xff1a;https://www.virtualbox.org/wiki/Downloads Vagrant下载地址&#xff1a;https://developer.hashicorp.com/vagrant/install#…...

【Java】ThreadLocal原理与使用场景

ThreadLocal原理&#xff1a; 字段&#xff1a; //ThreadLocal对象的哈希码 private final int threadLocalHashCode nextHashCode();//生成ThreadLocal对象的哈希码时&#xff0c;需要用到该对象&#xff0c;从0开始 private static AtomicInteger nextHashCode new Atomic…...

软件测试/测试开发丨Linux进阶命令(curl、jq)

1、 curl 接口请求 curl是一个发起请求数据给服务器的工具curl支持的协议FTP、FTPS、HTTP、HTTPS、TFTP、SFTP、Gopher、SCP、Telnet、DICT、FILE、LDAP、LDAPS、IMAP、POP3、SMTP和RTSPcurl是一个非交互的工具 2、 curl 发起 get 请求 -G&#xff1a;使用get请求-d&#xf…...

保障线上服务高可用借助 Taotoken 的容灾与路由能力

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 保障线上服务高可用借助 Taotoken 的容灾与路由能力 对于依赖大模型 API 的线上应用而言&#xff0c;服务的持续可用性是核心诉求之…...

基于MCP协议的学术成果商业化AI管道:从论文到商业机会的自动化桥梁

1. 项目概述&#xff1a;从象牙塔到市场的自动化桥梁看到apifyforge/academic-commercialization-pipeline-mcp这个项目标题&#xff0c;我的第一反应是&#xff1a;终于有人把学术界和产业界之间那道无形的墙&#xff0c;用代码给砌出了一条自动化通道。这个项目本质上是一个“…...

游戏模组管理革命:XXMI启动器如何改变你的游戏体验

游戏模组管理革命&#xff1a;XXMI启动器如何改变你的游戏体验 【免费下载链接】XXMI-Launcher Modding platform for GI, HSR, WW and ZZZ 项目地址: https://gitcode.com/gh_mirrors/xx/XXMI-Launcher 在当今的游戏模组生态中&#xff0c;玩家们面临着诸多挑战&#x…...

深度探索JD-GUI:Java字节码逆向工程与代码解析实战剖析

深度探索JD-GUI&#xff1a;Java字节码逆向工程与代码解析实战剖析 【免费下载链接】jd-gui A standalone Java Decompiler GUI 项目地址: https://gitcode.com/gh_mirrors/jd/jd-gui 在Java开发与逆向工程领域&#xff0c;Java反编译、字节码分析、代码逆向已成为开发者…...

从零构建智能Line机器人:基于ChatGPT API的即时通讯AI助手开发指南

1. 项目概述&#xff1a;一个能帮你“翻译”一切的Line机器人 如果你经常使用Line&#xff0c;并且对ChatGPT这类AI助手的能力感到好奇&#xff0c;那么“ChatGPT-Line-Bot”这个项目&#xff0c;可能就是为你量身定做的。简单来说&#xff0c;它是一个架设在Line平台上的聊天…...

Linux 设备树深度解析之Amlogic SoC 多媒体

第一部分&#xff1a;Amlogic Canvas —— 视频像素缓冲区元数据中间件1.1 设计精髓分析Amlogic Canvas本质上是一个硬件级别的像素缓冲区描述符池。它存储每个编号对应的宽度、高度、物理地址、包裹模式、块模式&#xff08;GXBB及之后还支持端序&#xff09;等元数据。视频解…...

vim-airline缓冲区管理终极指南:解锁高效Vim编辑的10个技巧

vim-airline缓冲区管理终极指南&#xff1a;解锁高效Vim编辑的10个技巧 【免费下载链接】vim-airline lean & mean status/tabline for vim thats light as air 项目地址: https://gitcode.com/gh_mirrors/vi/vim-airline 想要在Vim中实现极致的编辑效率吗&#xff…...

LLM Workflow Engine:命令行AI工作流引擎的架构与实战

1. 项目概述&#xff1a;从命令行到工作流&#xff0c;一个LLM引擎的进化如果你和我一样&#xff0c;是个重度命令行用户&#xff0c;同时又对大型语言模型&#xff08;LLM&#xff09;的潜力着迷&#xff0c;那你肯定经历过这种纠结&#xff1a;想快速用GPT-4验证一个想法&…...

MMC柔性直流输电稳定性与参数控制【附代码】

✨ 长期致力于模块化多电平换流器、弱交流电网、小信号模型、控制器参数优化、粒子群算法、模糊控制研究工作&#xff0c;擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流&#xff0c;点击《获取方式》 &#xff08;1&#xff09;弱…...

飞蜂窝技术:从概念到5G室内覆盖核心的实战演进

1. 从“未来可期”到“正在爆发”&#xff1a;飞蜂窝技术的十年之约在通信行业里待久了&#xff0c;你总会听到一些技术名词被反复提起&#xff0c;它们像流星一样划过天际&#xff0c;被分析师们预言将“改变一切”&#xff0c;然后……似乎又沉寂了下去。飞蜂窝&#xff08;F…...