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

写在最后

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

语义分割的应用及发展

语义分割(Semantic Segmentation)是一种计算机视觉领域的任务&#xff0c;旨在将一张图像中的每一个像素都分配一个语义标签&#xff0c;即将图像中的每个物体区域进行精确的分类划分。例如&#xff0c;在一张街景图中&#xff0c;语义分割可以将人、车、路、天空等每个像素分别…

2023-12-20 LeetCode每日一题(判别首字母缩略词)

2023-12-20每日一题 一、题目编号 2828. 判别首字母缩略词二、题目链接 点击跳转到题目位置 三、题目描述 给你一个字符串数组 words 和一个字符串 s &#xff0c;请你判断 s 是不是 words 的 首字母缩略词 。 如果可以按顺序串联 words 中每个字符串的第一个字符形成字符…

css mask 案例

文章目录 一、基本用法二、图案遮罩二、文字阴影效果三、日历探照灯效果 CSS的mask属性用于定义一个可重复使用的遮罩&#xff0c;可以将其应用到任何可视元素上。这个功能类似于Photoshop中的图层蒙版。通过mask属性&#xff0c;可以创建独特的效果&#xff0c;比如圆形、渐变…

GIT提交、回滚等基本操作记录

1、add文件时warning: LF will be replaced by CRLF in .idea/workspace.xml. 原因&#xff1a;windows中的换行符为 CRLF&#xff0c; 而在Linux下的换行符为LF&#xff0c;所以在执行add . 时会出现以下提示 解决&#xff1a;git config core.autocrlf false 2、GIT命令&…

AJAX: 整理2:学习原生的AJAX,这边借助express框架

1. npm install express 终端直接安装 2. 测试案例&#xff1a;Hello World&#xff01; 新建一个express.js的文件&#xff0c;写入下方的内容 // 1. 引入express const express require(express)// 2. 创建服务器 const app express()// 3.创建路由规则 // request 是对请…

python+django在线学习教学辅助作业系统gp6yp

本课题使用Python语言进行开发。基于web,代码层面的操作主要在PyCharm中进行&#xff0c;将系统所使用到的表以及数据存储到MySQL数据库中 技术栈 后端&#xff1a;pythondjango 前端&#xff1a;vue.jselementui 框架&#xff1a;django/flask Python版本&#xff1a;python3.…

用Xshell连接虚拟机的Ubuntu20.04系统记录。虚拟机Ubuntu无法上网。本机能ping通虚拟机,反之不能。互ping不通

先别急着操作&#xff0c;看完再试。 如果是&#xff1a;本机能ping通虚拟机&#xff0c;反之不能。慢慢看到第8条。 如果是&#xff1a;虚拟机不能上网&#xff08;互ping不通&#xff09;&#xff0c;往下一直看。 系统是刚装的&#xff0c;安装步骤&#xff1a;VMware虚拟机…

Windows搭建RTMP视频流服务(Nginx服务器版)

文章目录 引言1、安装FFmpeg2、安装Nginx服务器3、实现本地视频推流服务4、使用VLC或PotPlayer可视化播放器播放视频5、RTSP / RTMP系列文章 引言 RTSP和RTMP视频流的区别 RTSP &#xff08;Real-Time Streaming Protocol&#xff09;实时流媒体协议。 RTSP定义流格式&#xff…

全栈架构:从0开始,Vue的搭建与开发

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;很多小伙伴拿到一线互联网企业、上市企业如阿里、网易、有赞、希音、百度、滴滴的面试资格。 然后&#xff0c;很多小伙伴平时聚焦CRUD&#xff0c;没有亮点项目&#xff0c; 黄金项目。 简历也写得是非常lo…

第5课 使用openCV捕获摄像头并实现预览功能

这节课我们开始利用ffmpeg和opencv来实现一个rtmp推流端。推流端的最基本功能其实就两个:预览画面并将画面和声音合并后推送到rtmp服务器。 一、FFmpeg API 推流的一般过程 1.引入ffmpeg库&#xff1a;在代码中引入ffmpeg库&#xff0c;以便使用其提供的功能。 2.捕获摄像头…

【教3妹学编程-算法题】一年中的第几天

3妹&#xff1a;“太阳当空照&#xff0c;花儿对我笑&#xff0c;小鸟说早早早&#xff0c;你为什么背上炸药包” 2哥 :3妹&#xff0c;什么事呀这么开森。 3妹&#xff1a;2哥你看今天的天气多好啊&#xff0c;经过了一周多的寒潮&#xff0c;天气总算暖和些了。 2哥&#xff…

因吹斯汀!只需上传照片,GPT-4V精准识别食物的卡路里和摄入热量

健身和减肥的朋友有福啦&#xff01; 最近一篇文章探索了GPT-4V在膳食评估领域的强大能力&#xff0c;可以根据饮食图片精准判断食物的种类与重量&#xff0c;并给出营养成分的分析&#xff0c;包括碳水化合物、蛋白质、脂肪占比。 最最重要的是&#xff0c;它还能告诉我们这…

分布式文件系统的介绍

什么是分布式文件系统 跨越多个服务器或者多个位置的文件系统。其中涉及的技术包括数据的复制、数据的分片和路由,由于用户可能存储大文件、图片或者其他类似的需求性文件,因此需要设计不同的系统方便用户访问的存取。 任何设备通过任何网络位置访问文件,就像访问到自己的文…

c 生成16×16像素点的rgb格式图片

想验证jpeg 编解码各个环节是否正确&#xff0c;特小尺寸的yuv格式图片找不到。特意用c代码生成一个1616像素点的rgb格式图片,再转换为yuv444格式&#xff0c;再88分割&#xff0c;余弦转换&#xff0c;量化&#xff0c;Z变换&#xff0c;霍夫曼编码&#xff0c;生成比特流&…

qt中信号槽第五个参数

文章目录 connent函数第五个参数的作用自动连接(Qt::AutoConnection)直接连接(Qt::DirectConnection - 同步)同线程不同线程 队列连接(Qt::QueuedConnection - 异步)同一线程不同线程 锁定队列连接(Qt::BlockingQueuedConnection) connent函数第五个参数的作用 connect(const …

2023-12-19 LeetCode每日一题(寻找峰值 II)

2023-12-19每日一题 一、题目编号 1901. 寻找峰值 II二、题目链接 点击跳转到题目位置 三、题目描述 一个 2D 网格中的 峰值 是指那些 严格大于 其相邻格子(上、下、左、右)的元素。 给你一个 从 0 开始编号 的 m x n 矩阵 mat &#xff0c;其中任意两个相邻格子的值都 不…

机器学习之人工神经网络(Artificial Neural Networks,ANN)

人工神经网络(Artificial Neural Networks,ANN)是机器学习中的一种模型,灵感来源于人脑的神经网络结构。它由神经元(或称为节点)构成的层级结构组成,每个神经元接收输入并生成输出,这些输入和输出通过权重进行连接。 人工神经网络(ANN)是一种模仿生物神经系统构建的…

基于PHP的高校学生宿舍信息系统

有需要请加文章底部Q哦 可远程调试 基于PHP的高校学生宿舍系统 一 介绍 此学生宿舍信息系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端jquery.js。系统角色分为学生&#xff0c;辅导员和宿管员。(附带配套设计文档) 技术栈&#xff1a;phpmysqljquery.jsphpstu…

玩转MYSQL|详细分析mysql-MGR集群搭建

目录 1、简介 2、环境准备 2.1 数据库服务器规划 2.2 安装mysql5.7.20 2.3 设置hostname和ip映射 3、创建复制环境 3.1 服务器host68.cn 3.1.1 配置/etc/my.cnf 3.1.2 服务器host68.cn上建立复制账号&#xff1a; 3.1.3 在mysql服务器host68.cn上安装group replicatio…

Tuxera NTFS for Mac2024免费Mac读写软件下载教程

在日常生活中&#xff0c;我们使用Mac时经常会遇到外部设备不能正常使用的情况&#xff0c;如&#xff1a;U盘、硬盘、软盘等等一系列存储设备&#xff0c;而这些设备的格式大多为NTFS&#xff0c;Mac系统对NTFS格式分区存在一定的兼容性问题&#xff0c;不能正常读写。 那么什…