java php serialize_php 序列化serialize() 与反序列化unserialize()

在php中,可以对数组,变量,对象等进行序列化(静态变量,常量不会被序列化)

class TestSerialize{

private $name;

private $password;

const ID = 1234;

public static $_class_name = __CLASS__;

public function __set($varname,$value){

$this->$varname = $value;

}

public function __get($varname)

{

return $this->$varname;

}

}

$data = array(

'name'=>'zhangsan',

'password'=>'pwd123'

);

$test = 'abcd';

$ts = new TestSerialize();

$ts->name = 'zhangsan_2';

$ts->password = 'pwd123_2';

echo  'var=>'.serialize($test).'
';

echo  'array=>'.serialize($data).'
';

echo  'object=>'.serialize($ts).'
';

?>

输出结果

var=>s:4:"abcd";

array=>a:2:{s:4:"name";s:8:"zhangsan";s:8:"password";s:6:"pwd123";}

object=>O:13:"TestSerialize":2:{s:19:"TestSerializename";s:10:"zhangsan_2";s:23:"TestSerializepassword";s:8:"pwd123_2";}

序列化产生的数据可以保存在本地文件中,也可以进行网络传输

function writeObject($filename,$data='')

{

if(!file_exists(dirname(__FILE__).'/tmp/'))

{

mkdir(dirname(__FILE__).'/tmp/');

}

$fp = fopen ( dirname(__FILE__).'/tmp/'.$filename, "w+" );

if (flock($fp, LOCK_EX )) //给文件加锁

{

fwrite($fp, $data );

flock( $fp, LOCK_UN ); //给文件解锁

} else {

echo 'Couldn\'t lock the file !';

}

fclose ( $fp );

}

function readObject($filename)

{

if(file_exists(dirname(__FILE__).'/tmp/'.$filename))

{

$fp = fopen ( dirname(__FILE__).'/tmp/'.$filename, "r" );

stream_set_timeout($fp,2);

$contents = fread($fp, filesize(dirname(__FILE__).'/tmp/'.$filename));

fclose ($fp);

return $contents;

}

return NULL;

}

测试一下

writeObject('data.txt',serialize($data));

writeObject('array.txt',serialize($test));

writeObject('object.txt',serialize($ts));

echo readObject('data.txt');

echo readObject('data.txt');

echo readObject('data.txt');

打印结果

a:2:{s:4:"name";s:8:"zhangsan";s:8:"password";s:6:"pwd123";}s:4:"abcd";O:13:"TestSerialize":2:{s:19:"TestSerializename";s:10:"zhangsan_2";s:23:"TestSerializepassword";s:8:"pwd123_2";}

为了保证持久化的有效性,我们可以对从数据库读取出来的文件反序列化

$f_data =  readObject('data.txt');

$f_array =  readObject('array.txt');

$f_object =  readObject('object.txt');

$d = unserialize($f_data);

$a = unserialize($f_array);

$u = unserialize($f_object);

print_r($d);

echo '
';

echo $a;

echo '
';

echo $u->name;

输出结果

Array ( [name] => zhangsan [password] => pwd123 )

abcd

zhangsan_2

可见序列化可以将对象持久化

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值