序列化serialize()与反序列化unserialize():

序列化serialize():就是将一个变量所代表的 “内存数据”转换为“字符串”的形式,并持久保存在硬盘(写入文件中保存)上的一种做法,即,把“内存数据”转换为“字符串”然后保存到文件中;

反序列化unserialize():就是将序列化之后保存在硬盘(文件)上的“字符串数据”恢复为其原来的内存形式的变量数据的一种做法,即,把文件中保存的序列化后的“字符串数据”恢复为“内存数据”;

对象的序列化:1.对一个对象进行序列化,只能将其属性数据“保存起来”,而方法被忽略(方法不是数据),但是类名也能被保存起来,因此反序列化的位置只要有该类文件,就仍然可以将对象还原,即该对象的属性和方法依然可以使用;

2.对象序列化的时候,会自动调用该对象所属类的__sleep()魔术方法;

对象的反序列化:1.对一个对象进行反序列化,其实是恢复原来保存起来的属性数据,而且,此时必须需要依赖该对象原来的所属类;

2.对象反序列化的时候,会自动调用该对象所属类的__wakeup()魔术方法;

总结:一般当我们需要将数据保存到文件中时会用到序列化,保存到数据库中一般不这样用,因为序列化和反序列化的过程其实很耗时;

使用实例如下:

/*

* 对基本数据进行序列化和反序列化

* */

$v1 = 1 ;

$v2 = "abc" ;

$v3 = false ;

$v4 = array(41,42,43) ;

/*再对它们进行序列化*/

$str1 = serialize($v1) ;//将内存数据转换为字符串

$str2 = serialize($v2) ;

$str3 = serialize($v3) ;

$str4 = serialize($v4) ;

file_put_contents("./file1.txt",$str1) ;//将序列化后的字符串数据保存到硬盘(文件)中

file_put_contents("./file2.txt",$str2) ;//将序列化后的字符串数据保存到硬盘(文件)中

file_put_contents("./file3.txt",$str3) ;//将序列化后的字符串数据保存到硬盘(文件)中

file_put_contents("./file4.txt",$str4) ;//将序列化后的字符串数据保存到硬盘(文件)中

/*再对它们进行反序列化*/

$str1 = file_get_contents(‘./file1.txt‘) ;//读取硬盘(文件)上保存的序列化后的字符串数据

$str2 = file_get_contents(‘./file2.txt‘) ;//读取硬盘(文件)上保存的序列化后的字符串数据

$str3 = file_get_contents(‘./file3.txt‘) ;//读取硬盘(文件)上保存的序列化后的字符串数据

$str4 = file_get_contents(‘./file4.txt‘) ;//读取硬盘(文件)上保存的序列化后的字符串数据

$v1 = unserialize($str1) ; //将序列化后的“字符串数据”反序列化为“内存数据”

$v2 = unserialize($str2) ; //将序列化后的“字符串数据”反序列化为“内存数据”

$v3 = unserialize($str3) ; //将序列化后的“字符串数据”反序列化为“内存数据”

$v4 = unserialize($str4) ; //将序列化后的“字符串数据”反序列化为“内存数据”

/*

* 对象的序列化和反序列化

* */

/*当new一个类的对象时,若该类不存在,就会自动调用该方法来加载所需要的类文件*/

function __autoload($className){//php的自动加载类,参数为类名,类文件命名规则为:类名.class.php

$fileName = "./".$className.".class.php" ;

include_once $fileName ;

}

$obj1 = new MP3Player();

$name1 = $obj1 ->name ;

$obj1 ->dataIn() ;

$obj1 ->next() ;

/*序列化对象*/

$s1 = serialize($obj1) ;//将obj1对象转换为字符串数据

file_put_contents(‘./obj1.txt‘,$s1) ;//保存在硬盘(文件)中

/*反序列化对象*/

$s1 = file_get_contents(‘./obj1.txt‘) ;//读取硬盘上的字符串数据

$obj2 = unserialize($s1) ;//将序列化后的字符串数据还原为内存数据

$name2 = $obj2 ->name ;

/*虽然序列化后只保存了对象的属性数据而没有保存对象的方法,但是其保存了对象的类名,

*所以进行反序列化后对象内的方法任然存在,仍然可以供对象调用,反序列化的过程

* 就是对原来对象进行恢复的过程*/

$obj2 ->dataIn() ;

$obj2 ->next() ;

php serialize参数,php serialize(),unserialize()相关推荐

  1. php serialize参数,PHP 序列化(serialize)格式详解

    PHP 序列化(serialize)格式详解 1.前言 PHP (从 PHP 3.05 开始)为保存对象提供了一组序列化和反序列化的函数:serialize.unserialize.不过在 PHP 手 ...

  2. jQuery form表单的serialize()参数和其他参数 如何一起传给后端

    在前端给后端传递参数时,有时候form表单,我们为了方便,直接可以通过 var formData=$("#formid").serialize();来统一传给后端,这样可以节省很多 ...

  3. php serialize error at offset,unserialize(): Error at offset出现的原因分析以及解决方法

    在PHP的unserialize函数使用中,当字符串或数据库中取出的数据有中文的时候,会出现如下错误Notice: unserialize(): Error at offset xx of xxx b ...

  4. php表单提交serialize,jQuery使用serialize(),serializeArray()方法取得表单数据

    原始form表单值获取方式(手动):$.ajax({ type: "POST", url: "ajax.php", data: {'name':'摘取天上星', ...

  5. java ajax serialize,jQuery使用serialize(),serializeArray()方法取得表单数据

    $.ajax({ type: "POST", url:"ajax.php", data:$('#formID').serialize(),// 要提交的表单 s ...

  6. php -- 用文本来存储内容,file_put_contents,serialize,unserialize

    根据存储的内容来划分 字符串: file_put_contents :将一个字符串写入文件 语法:int file_put_contents ( string $filename , mixed $d ...

  7. mysql序列化字段反序列化_序列化serialize()与反序列化unserialize()的实例

    在写序列化serialize与反序列化unserialize()时,我们先来看看: serialize - 产生一个可存储的值的表示 描述 string serialize ( mixed $valu ...

  8. serialize和unserialize函数

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

  9. Jquery表单序列化(serialize、serializeArray、serializeJson)及序列化后追加参数

    文章目录 表单提交的原则 结论一:name相同的表单提交格式 结论二:没有name的表单.disabled的表单 结论三:redio.checkbox选中值却没有value属性 结论四:被选中的opt ...

  10. MC缓存序列化php,PHP serialize()序列化的使用

    PHP serialize()序列化的使用 可以将数组和对象直接存入数据库中的某一字段. 使serialize()是将数组反序列化再存入数据库,序列化话完的数据就是一个字符串. 提取的时候,用unse ...

最新文章

  1. A different twist on pre-compiling JSPs--reference
  2. jsp中不能正常显示图片+不能正常显示bootstrap字体图标
  3. 网站建设PHP中mysql和mysqli的区别
  4. 挖洞技巧:如何绕过URL限制
  5. 让我们一起Go(九)
  6. freeradius 测试mysql_在linux下安装配置mysql+freeradius
  7. memcpy( )函数复制二维数组 memcmp( )函数比较二维数组
  8. sql面试题及答案总结
  9. 2018-2019的裁员风波(程序员要有危机意识,程序员堪比娱乐圈,更新换代快)
  10. docker network详解、教程
  11. 【WIN10】PS/2 标准键盘鼠标带感叹号(代码10,39)(适用于红米G)
  12. LCD1602液晶显示屏
  13. 度数换算_视力表、近视度数换算方法(实用珍藏版)
  14. 'MLY -- 12.Takeways:Setting up development and test sets'
  15. 【Android】Android Window
  16. html5源码笔记(三)【爱创课堂专业前端培训】
  17. PDF文档无损去签名去口令
  18. 【React】React Js入门教程(一学就会)
  19. IDEA如何连接MySQL数据库?
  20. 编写高质量代码改善C#程序的157个建议——建议64:为循环增加Tester-Doer模式而不是将try-catch置于循环内...

热门文章

  1. 《Visual C# 从零开始学》
  2. yum离线安装rpm包
  3. 项目中libevent几个问题
  4. Cocos2d-x 3.0 动作
  5. C# Windows Phone App 开发,自制LockScreen 锁定画面类别(Class),从【网路图片】、【Assets资源】、【UI】修改锁定画面。...
  6. 设计模式系列--Singleton
  7. 孙鑫VC学习笔记:第十三讲 (三) WM_FILE_NEW消息响应原理
  8. 拓端tecdat|R语言弹性网络Elastic Net正则化惩罚回归模型交叉验证可视化
  9. 拓端tecdat|R语言用Copulas模型的尾部相依性分析损失赔偿费用
  10. 拓端tecdat|R语言基于ARCH模型股价波动率建模分析