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

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

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

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

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

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

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

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

使用实例如下:

<?php
/*
* 对基本数据进行序列化和反序列化
* */
$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()与反序列化unserialize()的更多相关文章

  1. 序列化serialize()与反序列化unserialize()的实例

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

  2. 文件读取的时候要留意 -- 序列化serialize()与反序列化unserialize():

    原文:https://blog.csdn.net/little_rabbit_baby/article/details/53840543 序列化serialize()与反序列化unserialize( ...

  3. 序列化serialize与反序列化unserialize

    有利于存储和传递value(除了resource类型外),却不会丢失其原有类型和结构. serialize序列化时会调用魔术方法__sleep(); unserialize反序列化时会调用魔术方法__ ...

  4. PHP序列化serialize()和反序列化unserialize()

    所谓的序列化,就是把保存在内存中的各种对象状态或属性保存起来,在需要时可以还原出来. serialize() 可处理除了 resource 之外的任何类型返回字符串,此字符串包含了表示 value 的 ...

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

    用法:serialize().unserialize() 适用情境:serialize()返回字符串,此字符串包含了表示value的字节流,可以存储于任何地方.这有利于存储或传递 PHP 的值,同时不 ...

  6. 【MFC】序列化(Serialize)、反序列化(Deserialize)

    1.首先在头文件里面声明 DECLARE_SERIAL(CSelectionSerial) 2.重写CObject的Serialize函数 virtual void Serialize(CArchiv ...

  7. 【转】【C#】序列化(Serialize)、反序列化(Deserialize)

    序列化又称串行化,是.NET运行时环境用来支持用户定义类型的流化的机制.其目的是以某种存储形成使自定义对象持久化,或者将这种对象从一个地方传输到另一个地方. .NET框架提供了两种串行化的方式: 1. ...

  8. 深入C#学习系列一:序列化(Serialize)、反序列化(Deserialize)

    序列化概述: 序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对象将其当前状态写入到临时或持久性存储区.以后,可以通过从存储区中读取或反序列化对象 ...

  9. C#—序列化(Serialize)和反序列化(NonSerialize)

    (转自:http://www.cnblogs.com/Abel-Zhang/p/Serialize.html) 一.概述 序列化是把对象转变成流.相反的过程就是反序列化. 哪些场合用到这项技术呢? 1 ...

随机推荐

  1. jQuery的定时执行和延迟执行

    jQuery的定时执行和延迟执行 //延迟执行 setTimeout(function(){ console.log("实战授课,100%就业"); },600); //定时执行 ...

  2. http 中各个 header 的含义

    HTTP Request的Header信息 1.HTTP请求方式 如下表: GET 向Web服务器请求一个文件 POST 向Web服务器发送数据让Web服务器进行处理 PUT 向Web服务器发送数据并 ...

  3. php支付走过的坑(支付宝篇 注册 秘钥 环境等等配置)

    支付这东西,说容易也容易,说难也难 代码这玩意还比较好说 但是 如果没有demo 直接去看官方文档 十有八九一脸懵逼 今天就整理一下 支付这块走过的坑 涉及 微信h5支付 支付宝h5支付 (api文档 ...

  4. NoSQL(Not Only SQL)

    Everything has its properties and has relation with each other. All in world can be related to each ...

  5. 【起航计划 011】2015 起航计划 Android APIDemo的魔鬼步伐 10 App->Activity->Reorder Activities 后退栈 Intent FLAG

    Reorder Activities 示例有四个相关的Activitives: ReorderOnLaunch, ReorderTwo,ReorderThree, ReorderFour.其中Reor ...

  6. check_mk 之 Configuration variables

    Basic settings #check_parameters This is a configuration list assigning specific check parameters to ...

  7. yum第三方源

    EPEL RHEL 6: http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm RHEL 7: http:// ...

  8. php的yii框架开发总结10

    1.CActiveForm是Chtml类的封装,但是它有数据验证的功能,有三种方式:服务器端.客户端.Ajax数据验证. 服务器端验证:当整个表单页面被提交后,在服务器端 进行验证.如果存在任何验证错 ...

  9. js中字符串怎么转化为日期

    var str = "2010-08-01"; // 转换日期格式 str = str.replace(/-/g, '/'); // "2010/08/01"; ...

  10. Socket的基本使用步骤

    Socket的基本使用步骤 一.使用Socket,首先需要导入这几个系统头文件 #import <sys/socket.h> #import <netinet/in.h> #i ...