本篇内容介绍了“php序列化与反序列化的概念”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
什么是序列化与反序列化?
(反)序列化给我们传递对象提供了一种简单的方法.serialize()将一个对象转换成一个字符串,unserialize()将字符串还原为一个对象,在php应用中,序列化和反序列化一般用做缓存,比如会话缓存,饼干等。
序列化
序列化是将变量转换为可保存或传输的字符串的过程,在php中是使用序列化()方法实现将类进行序列化,下面是一段php序列化代码,可以通过注释理解代码含义。
& lt; php ? class LessSafe ,,,//定义一个来自类 { public name 美元;,=,& # 39;来自# 39;;,,,//定义一个名字变量 public age 美元=,2;//定义一个年龄变量 function getname()//定义一个方法 { echo 美元这→名称; } } $ s =, new 来自();,,,//创建一个对象 echo $ s→getname()干净& lt;/br>“;//调用方法 $ s_serialize =,序列化($ s);//讲对象进行序列化 print_r ($ s_serialize);//打印序列化结果 ?在
序列化运行结果
反序列化结果:<强> O: 8:“LessSafe": 2: {: 4:“name"销售:8:“LessSafe";销售:3:“age";我:2;}强>
O为对象对象,8为来自对象名长度,2为{}内属性的个数,{}内为对象的属性,年代为类型字符串字符串4为属性名的长度分号;隔开后是该属性的值s为值类型为字符串字符串类型4位属性名的长度名字就是属性名了(属性名为字符串类型要使用双引号)8为值的长度来自是值后面年龄属性与名字属性类似除了值数据类型为整型我值为2
反序列化
& lt; php ? $ b=unserialize ($ _GET [H]);,,//通过得到传参将序列化内容传进来,使用非系列化进行反序列化处理 print_r (b)美元;,,//打印反序列化结果 ?在
我在这里使用了上文序列换的结果传递到服务端进行处理并查看打印结果
http://192.168.75.138/fxlh.php?H=O 8:“LessSafe": 2: {: 4:“name"销售:8:“LessSafe";销售:3:“age";我:2;}
魔法函数
在介绍反序列化之前,我们需要了解一下魔法函数,__construct当一个对象创建时调用(构造函数);__destruct当一个对象被销毁时调用(破坏者);__toString当一个对象被当作一个字符串时使用,__sleep当对一个对象序列化时,php就会调用__sleep方法(如果存在的话),__wakeup在反序列化时,php就会调用__wakeup方法(如果存在的话)。
下面是调用__construct, __destruct, __toString时案例
& lt; php ? class TestClass { ,,,public variable 美元;=,& # 39;却;能够is a 字符串# 39;;//一个变量 ,,,public function PrintVariable()//一个简单的方法 ,,,{ ,,,,,,,echo $ this→变量# 39;公司& lt; br /祝辞;& # 39;; ,,,} ,,,public function __construct()//构造函数 ,,,{ ,,,,,,,echo & # 39; __construct
下面是调用__sleep时案例
& lt; php ? class LessSafe ,,,//定义一个来自类 { public name 美元;,=,& # 39;来自# 39;;,,,//定义一个名字变量 public age 美元=,2;//定义一个年龄变量 function getname()//定义一个方法 { echo 美元这→名称; } function __sleep(),,//定义__sleep魔法函数 { echo “When  using 序列化,__sleep (), will be called"; } } $ s =, new 来自(),,,,//创建一个对象 echo $ s→getname()干净& lt;/br>“;//调用方法 $ s_serialize =,序列化($ s);//讲对象进行序列化 print_r ($ s_serialize);//打印序列化结果 祝辞;php序列化与反序列化的概念