php serialize参数,php serialize(),unserialize()

序列化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() ;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值