• 技术文章 >php教程 >php手册

    php面向对象全攻略 (十六) 对象的串行化_php基础

    2016-05-17 09:02:27原创425
    把对象串行化
    有时候需要把一个对象在网络上传输,为了方便传输,可以把整个对象转化为二进制串,
    等到达另一端时,再还原为原来的对象,这个过程称之为串行化,就像我们现在想把一辆汽
    车通过轮船运到美国去,因为汽车的体积比较大,我们可以把汽车拆开成小的部件,然后我们把这些部件通过轮般运到美国去,到了美国再把这些部件组装回汽车。
    有两种情况我们必须把对象串行化,第一种情况就是把一个对象在网络中传输的时候要
    将对象串行化,第二种情况就是把对象写入文件或是数据库的时候用到串行化。
    串行化有两个过程,一个是串行化,就是把对象转化为二进制的字符串,我们使用
    serialize()函数来串行化一个对象,另一个是反串行化,就是把对象转化的二进制字符串再转
    化为对象, 我们使用unserialize()函数来反串行化一个对象。
    PHP 中serialize()函数的参数为对象名,返回值为一个字符串,Serialize()返回的字符串
    含义模糊,一般我们不会解析这个串来得到对象的信息,我们只要把返回来的这个字符串传
    到网络另一端或是保存到方件中即可。
    PHP 中unserialize()函数来反串行化对象,这个函数的参数即为serialize()函数的返回值,
    输出当然是重新组织好的对象。代码片段
    复制代码 代码如下:

    class Person{
    //下面是人的成员属性
    var $name; //人的名子
    var $sex; //人的性别
    var $age; //人的年龄
    //定义一个构造方法参数为属性姓名$name、性别$sex和年龄$age进行赋值
    function __construct($name="", $sex="", $age=""){
    $this->name=$name;
    $this->sex=$sex;
    $this->age=$age;
    }
    //这个人可以说话的方法, 说出自己的属性
    function say() {
    echo "我的名子叫:".$this->name." 性别:".$this->sex." 我的年龄是:".$this->age."
    ";
    }
    }
    $p1=new Person("张三", "男", 20);
    $p1_string=serialize($p1); //把一个对象串行化,返一个字符串
    echo $p1_string."
    "; //串行化的字符串我们通常不去解析
    $p2=unserialize($p1_string); //把一个串行化的字符串反串行化形成对象$p2
    $p2->say();
    ?>

    上例输出结果:
    代码片段
    O:6:"Person":3:{s:4:"name";s:4:"张三";s:3:"sex";s:2:"男";s:3:"age";i:20;}
    我的名子叫:张三性别:男我的年龄是:20
    在php5 中有两个魔术方法__sleep()方法和__wakeup()方法,在对象串行化的时候,会调用
    一个__sleep()方法来完成一些睡前的事情;而在重新醒来,即由二进制串重新组成一个对象
    的时候,则会自动调用PHP 的另一个函数__wakeup(),做一些对象醒来就要做的动作。
    __sleep()函数不接受任何参数,但返回一个数组,其中包含需要串行化的属性。末被包
    含的属性将在串行化时被忽略,如果没有__sleep()方法,PHP 将保存所有属性。
    代码片段
    复制代码 代码如下:

    class Person{
    //下面是人的成员属性
    var $name; //人的名子
    var $sex; //人的性别
    var $age; //人的年龄
    //定义一个构造方法参数为属性姓名$name、性别$sex和年龄$age进行赋值
    function __construct($name="", $sex="", $age=""){
    $this->name=$name;
    $this->sex=$sex;
    $this->age=$age;
    }
    //这个人可以说话的方法, 说出自己的属性function say()
    {
    echo "我的名子叫:".$this->name." 性别:".$this->sex." 我的年龄是:".$this->age."
    ";
    }
    //指定串行化时把返回的数组中$name和$age值串行化,忽略没在数组中的属性$sex
    function __sleep() {
    $arr=array("name", "age");
    return($arr);
    }
    //重新生成对象时,并重新赋值$age为40
    function __wakeup() {
    $this->age = 40;
    }
    }
    $p1=new Person("张三", "男", 20);
    //把一个对象串行化,返一个字符串,调用了__sleep()方法,忽略没在数组中的属性$sex
    $p1_string=serialize($p1);
    echo $p1_string."
    "; //串行化的字符串我们通常不去解析
    $p2=unserialize($p1_string); //反串行化形成对象$p2重新赋值$age为40
    $p2->say();
    ?>

    上例输出值为:
    执行结果
    O:6:"Person":2:{s:4:"name";s:4:"张三";s:3:"age";i:20;}
    我的名子叫:张三性别:我的年龄是:40
    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:对象 串行化
    上一篇:php入门教程 精简版_php基础 下一篇:初学CAKEPHP 基础教程_php基础
    php培训_php实战培训【立即报名】-php中文网第20期

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• 简化的实现方法(限制为同一会话页面)• 我的论坛源代码(五)_php基础• PHP: 把数组存入文件• Yii中创建自己的Widget实例,yiiwidget实例• PHP获取文件扩展名的4种方法,
    1/1

    PHP中文网