PHP的serialize()串行化函数

serialize()和unserialize()在php手册上的解释是:

serialize — Generates a storable representation of a value,产生一个可存储的值的表示。

unserialize — Creates a PHP value from a stored representation,从已存储的表示中创建 PHP 的值。

serialize() 返回字符串,此字符串包含了表示 value 的字节流,可以存储于任何地方。这有利于存储或传递 PHP 的值,同时不丢失其类型和结构。

想要将已序列化的字符串变回 PHP 的值,可使用 unserialize() 。 serialize() 可处理除了 resource 之外的任何类型。甚至可以 serialize() 那些包含了指向其自身引用的数组。你正 serialize() 的数组/对象中的引用也将被存储。

当序列化对象时,PHP 将试图在序列动作之前调用该对象的成员函数 __sleep() 。这样就允许对象在被序列化之前做任何清除操作。类似的,当使用 unserialize() 恢复对象时, 将调用 __wakeup() 成员函数。

下面我们试一下这个函数的使用方法:

01<?php
02//声明一个类
03class dog {
04    var $name;
05    var $age;
06    var $owner;
07    function dog($in_name="unnamed", $in_age="0", $in_owner="unknown") {
08        $this->name = $in_name;
09        $this->age = $in_age;
10        $this->owner = $in_owner;
11    }
12    function getage() {
13        return ($this->age * 365);
14    }
15     
16    function getowner() {
17        return ($this->owner);
18    }
19     
20    function getname() {
21        return ($this->name);
22    }
23}
24//实例化这个类
25$ourfirstdog = new dog("Rover",12,"Lisa and Graham");
26//用serialize函数将这个实例转化为一个序列化的字符串
27$dogdisc = serialize($ourfirstdog);
28print $dogdisc; //$ourfirstdog 已经序列化为字符串 O:3:"dog":3:{s:4:"name";s:5:"Rover";s:3:"age";i:12;s:5:"owner";s:15:"Lisa and Graham";}
29print '<br />';
30/*
31-----------------------------------------------------------------------------------------
32    在这里你可以将字符串 $dogdisc 存储到任何地方如 session,cookie,数据库,php文件
33-----------------------------------------------------------------------------------------
34*/
35//我们在此注销这个类
36unset($ourfirstdog);
37/*    还原操作   */
38/*
39-----------------------------------------------------------------------------------------
40    在这里将字符串 $dogdisc 从你存储的地方读出来如 session,cookie,数据库,php文件
41-----------------------------------------------------------------------------------------
42*/
43//我们在这里用 unserialize() 还原已经序列化的对象
44$pet = unserialize($dogdisc); //此时的 $pet 已经是前面的 $ourfirstdog 对象了
45//获得年龄和名字属性
46$old = $pet->getage();
47$name = $pet->getname();
48//这个类此时无需实例化可以继续使用,而且属性和值都是保持在序列化之前的状态
49print "Our first dog is called $name and is $old days old<br />";
50print '<br />';
51?>

官方的一个程序例子:

01<?php
02// $session_data 是包含了当前用户 session 信息的多维数组。
03// 我们使用 serialize() 在请求结束之前将其存储到数据库中。
04$conn = odbc_connect ( "webdb" , "php" , "chicken" );
05$stmt = odbc_prepare ( $conn ,
06       "UPDATE sessions SET data = ? WHERE id = ?" );
07$sqldata = array ( serialize ( $session_data ), $PHP_AUTH_USER );
08if (! odbc_execute ( $stmt , & $sqldata )) {
09     $stmt = odbc_prepare ( $conn ,
10      "INSERT INTO sessions (id, data) VALUES(?, ?)" );
11    if (! odbc_execute ( $stmt , & $sqldata )) {
12     /* 出错 */
13     }
14}
15?>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值