PHP序列化反序列化serialize和unserialize函数

PHP序列化(serialize)格式详解 同时,通过反序列化过程,我们可以将序列化后的字符串重新转换为对象,并访问其属性值。在开发过程中,了解和掌握PHP序列化的使用方法对于处理对象数据是非常有帮助的。PHP序列化(serialize)是一种将PHP对象转换为可存储或传输的字符串表示形式的过程。序列化是指将对象转换为字符串的过程,以便在需要时可以重新创建该对象。序列化字符串中的对象属性用键值对的形式表示,其中键是属性名,值是属性值的序列化表示。序列化后的字符串是一个特定的格式,它包含了对象的类型信息和属性值。中是对象的属性信息。 阅读详情

昨天网上看到一道面试题,如下:

“类的属性可以序列化后保存到session中,从而以后可以恢复整个类,这要用到的函数是?”

我记得原来老师说过序列化函数是"serialize",查了下,果不其然,今天记录下,免得忘记。

<?php
    class aa{
        public $a = 1;
        private $b = 2;
        protected $c = 3;

        function afun(){
            return $this->a;
        }
        function bfun(){
            return $this->b;
        }
        function __destruct(){
            echo "变量销毁了";
        }
    }

    $v = new aa;
    echo $v->afun();
    $se = serialize($v);
    unset($v); //这里先销毁$v,这个时候会自动调用析构函数
    echo "<hr />";
    $v = unserialize($se); //再反序列化
    echo $v->bfun();

看看运行结果



如果觉得还不明显, 好,我们在改一下代码

aa.class.php

<?php
    class aa{
        public $a = 1;
        private $b = 2;
        protected $c = 3;

        function afun(){
            return '$a的值是:'.$this->a;
        }
        function bfun(){
            return '$b的值是:'.$this->b;
        }
    }

a1.php

<?php
    require './demo8.php';
    Session_start();
    $v = new aa();
    $_SESSION['v'] = serialize($v);

a2.php

<?php
    require './demo8.php';
    Session_start();
    $v = unserialize($_SESSION['v']);
    echo $v->bfun();

再看看结果是不是一目了然了呢,好了,试验做完了,结论调用下公论。

例子中的对象我们还可以换为数组等其他类型,效果都是一样的!
其实serialize()就是将PHP中的变量如对象(object),数组(array)等等的值序列化为字符串后存储起来.序列化的字符串我们可以存储在其他地方如数据库、Session、Cookie等,序列化的操作并不会丢失这些值的类型和结构。这样这些变量的数据就可以在PHP页面、甚至是不同PHP程序间传递了。
而unserialize()就是把序列化的字符串转换回PHP的值。

这里再引用一段PHP手册上的说明,看了上面的例子,应该很容易明白下面这些话的意思了
想要将已序列化的字符串变回 PHP 的值,可使用 unserialize()。serialize() 可处理除了 resource 之外的任何类型。甚至可以 serialize() 那些包含了指向其自身引用的数组。你正 serialize() 的数组/对象中的引用也将被存储。

当序列化对象时,PHP 将试图在序列动作之前调用该对象的成员函数 __sleep()。这样就允许对象在被序列化之前做任何清除操作。类似的,当使用 unserialize() 恢复对象时, 将调用 __wakeup() 成员函数
unserialize() 对单一的已序列化的变量进行操作,将其转换回 PHP 的值。返回的是转换之后的值,可为 integer、float、string、array 或 object。如果传递的字符串不可解序列化,则返回 FALSE。


PHP序列化与反序列化:serialize()和unserialize()函数 该接口定义了serialize()和unserialize()方法,用于自定义对象的序列化和反序列化。PHP中的serialize()和unserialize()函数是用于将数据序列化和反序列化的重要工具。在PHP中,我们可以使用serialize()函数进行序列化,使用unserialize()函数进行反序列化。对象必须实现Serializable接口,该接口定义了serialize()和unserialize()方法,以便对对象进行自定义序列化和反序列化。在serialize()方法中,我们将对象的。 阅读详情

相关推荐

KUKA 虚拟调试实战——打通Simpro4.1与OfficeLite8.6的通信与实时控制链路

本文详细介绍了KUKA虚拟调试实战,重点解析如何打通Simpro4.1与OfficeLite8.6的通信与实时控制链路。通过环境搭建、权限配置、机器人型号匹配等关键步骤,帮助工程师高效完成机器人轨迹规划和PLC联锁逻辑验证,大幅降低真机调试风险。文章还提供了典型报错解决方案和实时控制优化技巧,适用于工业机器人仿真与培训场景。

weixin_30907935的博客 451

CVE-2016-7124漏洞复现

CVE-2016-7124漏洞复现 实验环境 操作机:Windows 10 服务器:apache 2.4.39 PHP版本:5.2.17nts 漏洞影响版本 PHP5 < 5.6.25 PHP7 < 7.0.10 漏洞产生原因 如果类中存在__wakeup方法,调用 unserilize() 方法前则先调用__wakeup方法,当序列化字符串中表示对象属性个数的值大于 真实的属性个数时会跳过__wakeup的执行 漏洞复现 编写测试脚本 <?php header("Content-Type

万丈⾼楼平地起,勿在浮沙筑⾼台学艺不精的安全菜鸡,改行回家养猪了,对博客有疑问欢迎留言,看到一定回 2508

nsight-system教程

参考nsight-compute使用教程-优快云博客。

youzjuer的博客 1894

PHPserialize序列化与反序列化

类的析构函数是类的一种特殊的成员函数,它会在每次删除所创建的对象时执行。析构函数的名称与类的名称是完全相同的,只是在前面加了个波浪号(~)作为前缀,它不会返回任何值,也不能带有任何参数。protected在变量名前添加标记\00*\00。private在变量名前添加标记\00类名\00。s:17:“\00类名\00op”;每次在创建类的新对象的时候执行,构造函数名称与类的名称完全相同,也不会返回任何类型。unserialize反序列化(触发wakeup)

qq_64787896的博客 920

雷达气象学(8)——反射率因子图实战(强对流预警篇)

本文聚焦雷达反射率因子图在强对流预警中的实战应用,深入解析了柱状回波、有界弱回波区(BWER)、三体散射(TBSS)等关键回波结构特征,这些是识别超级单体风暴和大冰雹的核心“身份证”。文章强调从静态识别转向动态追踪与多源数据综合研判的思维转变,并提供了系统的实战分析流程与常见误区避坑指南,旨在提升对强对流天气的短临预警能力。

weixin_29213827的博客 486

k8s部署 普罗米修斯(Prometheus)监控

Prometheus是一个开源的服务监控系统和时序数据库其提供了通用的数据模型和快捷数据采集、存储和查询接口它的核心组件Prometheus服务器定期从静态配置的监控目标或者基于服务发现自动配置的目标中进行拉 取数据新拉取到啊的 数据大于配置的内存缓存区时,数据就会持久化到存储设备当中。

D2961953033的博客 3855

php 数组序列化和反序列化serialize 和 unserialize

<?php $a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut'); //序列化数组 $s = serialize($a); echo $s; //输出结果:a:3:{s:1:"a";s:5:"Apple";s:1:"b";s:6:"banana";s:1:"c";s:7:"Coconut";} echo

lvfk 1264

RFSoC应用XCZU47DR八发八收FPGA设计方案

本文介绍了基于Xilinx XCZU47DR RFSoC芯片的八发八收FPGA设计方案。该方案采用集成射频数据转换器的SoC架构,支持8路14bit ADC(5GSPS)和8路14bit DAC(9.85GSPS),可直接处理5GHz以下射频信号。硬件设计包含高性能输入缓冲器、QMC校正和复杂混频器,适用于5G/6G通信、雷达、卫星通信等领域。文章详细阐述了ADC/DAC子系统参数,包括通道配置、采样率、带宽等特性,并提供了FPGA顶层模块的硬件接口设计,展示了多通道数据收发处理能力。该方案无需外置混频器,

toonyhe的博客 1792

php中serialize和unserialize的用法详解

serialize和unserialize是PHP中非常重要的两个函数,可以将PHP对象转换为字符串并进行反序列化。可以看到,反序列化成功,并得到了一个新的stdClass对象$unserialized_person,其属性与$person完全一致。其中,$object是要序列化的PHP对象,$serialized_string则是将对象序列化后得到的字符串。其中,$serialized_string是要反序列化的字符串,$object则是反序列化后得到的PHP对象。

720

使用moveit控制机械臂

位置设置:`target_pose.position.x = 0.12`, `target_pose.position.y = 0.41`, 和 `target_pose.position.z = 0.44` 分别设置了机械臂末端执行器的X, Y, 和 Z坐标。设定目标位置:`group.set_pose_target(target_pose)` 这一命令将之前定义的目标位置和姿态设置为当前机械臂组的目标,为接下来的路径规划做准备。在机械臂控制的过程中,设定精确的目标位置和姿态是实现精确操作的关键步骤。

realman_Rop的博客 3688

【Unity动画优化插件】BT - OptiAnimX —— AAA级动画优化框架深度剖析

BT - OptiAnimX 是一款面向 Unity 的高性能动画优化框架,核心目标是解决多角色动画场景中的性能瓶颈问题。该插件对标《战争机器5》和《巫师3》等 AAA 游戏中的动画优化技术,通过一整套自动化与智能化的优化策略,将动画性能提升与视觉质量控制结合在一起。它适用于从移动端、VR 到高端 PC 的多平台项目,尤其在“多人角色 + 高频动画”的场景中表现突出,例如 MMO、开放世界、动作游戏等。BT - OptiAnimX 本质上是一套“动画性能调度系统”,而不仅仅是优化工具。

2403_88403568的博客 433

PHP中序列化函数serialize($arr) 和反序列化函数unserialize($info)

序列化与反序列化 把复杂的数据类型压缩到一个字符串中 serialize() 把变量和它们的值编码成文本形式 unserialize() 恢复原先变量 1.创建一个$arr数组用于储存用户基本信息,并在浏览器中输出查看结果; 2.将$arr数组进行序列化赋值给$info字符串,并在浏览器中输出查看结果; 使用序列化serialize($arr)函

不负好时光的博客 3126

简要介绍 | 雷达穿墙成像及其应用场景

本文简要介绍了雷达穿墙成像技术的原理、研究现状、挑战与未来展望,希望能为相关领域的研究与应用提供参考。具有广泛的应用前景。本文将详细介绍雷达穿墙成像的原理,以及其在不同应用场景中的实践。逆时偏移算法(Reverse-Time Migration, RTM)雷达穿墙成像技术是一种先进的遥感技术,具有。的能力,可用于探测室内目标。安全与救援、建筑结构检测等领域。雷达穿墙成像技术的核心原理是。是Green函数,表示从接收点。雷达穿墙成像及其应用场景。雷达穿墙成像及其应用场景。目标识别与定位准确性。

NLOS的博客 2233

php序列化(serialize)和反序列化(unserialize)函数

用法:serialize()、unserialize() 适用情境:serialize()返回字符串,此字符串包含了表示value的字节流,可以存储于任何地方。这有利于存储或传递 PHP 的值,同时不丢失其类型和结构。比较有用的地方就是将数据存入数据库或记录在文件中的时候. 可以对一般变量进行序列化,也可以对字典进行序列化。 &lt;?php $array = array(); $a...

Sea_Sand息禅 4722

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

serialize和unserialize函数是序列化和反序列化PHP中数据的常用函数。

$a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut'); //序列化数组 $s = serialize($a); echo $s; //输出结果:a:3:{s:1:"a";s:5:"Apple";s:1:"b";s:6:"banana";s:1:"c";s:7:"Coconut";} echo ''; //反序列化

mz_身边的专栏 560

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

PHP多种序列化/反序列化的方法(serialize和unserialize函数)

serialize和unserialize函数 这两个是序列化和反序列化PHP中数据的常用函数。 <?php $a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut'); //序列化数组 $s = serialize($a); echo $s; //输出结果:a:...

weixin_33805992的博客 143

php函数serialize()与unserialize() 数据序列化与反序列化

php函数serialize()与unserialize()说明及案例。想要将已序列化的字符串变回 PHP 的值,可使用unserialize()。serialize()可处理除了resource之外的任何类型。甚至可以serialize()那些包含了 指向其自身引用的数组。你正serialize()的数组/对象中的引用也将被存储。 serialize()返回字符串,此字符串包含了表示va...

weixin_30839881的博客 93

php函数 序列化serialize() 与 反序列化unserialize()

手册的描述: serialize (PHP 4, PHP 5, PHP 7) serialize — 产生一个可存储的值的表示 描述  string serialize ( mixed $value ) serialize() 返回字符串,此字符串包含了表示 value 的字节流,可以存储于任何地方。 这有利于存储或传递 PHP 的值,同时不丢失其类型

houzhyan-博客 1506

PHP多种序列化/反序列化的方法serialize和unserialize函数

序列化是将变量转换为可保存或传输的字符串的过程;反序列化就是在适当的时候把这个字符串再转化成原来的变量使用。这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性。 1. serialize和unserialize函数 这两个是序列化和反序列化PHP中数据的常用函数。 01 02

清蒸羊的博客 763

php反序列化漏洞学习

魔术方法在一些特定的情况下能被自动调用,所以我们一般用这个来绕过一些验证和过滤或者用来执行代码;魔术方法是以__开头的特殊函数,我们需要掌握上面条件下能调用什么魔术方法,什么魔术方法有什么作用,使用多个魔术方法的时候魔术方法调用的先后顺序是什么。

zl0_00_0的博客 1352

PHP反序列化漏洞(什么是反序列化漏洞及操作)

**一.**在理解这个漏洞前,你需要先搞清楚php中serialize(),unserialize()这两个函数。 序列化serialize() 序列化说通俗点就是把一个对象变成可以传输的字符串,比如下面是一个对象: class S{ public $test=“pikachu”; } s=newS();//创建一个对象serialize(s=new S(); //创建一个对象 seria...

gl620321的博客 1147

PHP反序列化

创造类x,定义了一个魔术常量x为_FILE_(当前文件名),又定义了几个函数,construct函数让x类中的x赋值,wakeup让x重新赋值为_FULE_,destruct函数高亮x常量,如果传参x存在反序列化,否则输出。反序列化使用unserialize()函数将字符串转换为对象,序列化使用serialize()函数将对象转化为字符串。修改为O:1:"X":2:{s:1:"x";看到提示flag在fllllllag.php中,将代码复制,删掉没有的,加上x序列化。

cyhssl的博客 478
上一篇: PHP中empty()和isset()的区别
下一篇: 关于js里面的变量范围
键盘钢琴师
博客等级 码龄11年 21粉丝 58原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值