PHP 中__sleep()方法,__wakeup()方法

在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 . "<br>";
        }

        //指定串行化时把返回的数组中$name和$age值串行化,忽略没在数组中的属性$sex
        function __sleep() {
            $arr = array("name", "age"); // 此时,属性$sex将被删除!!!

            return($arr);
        }

        //重新生成对象时,并重新赋值$age为40
        function __wakeup() {
            $this->age = 40;
        }
    }

    $p1 = new Person("张三", "男", 20);

    //把一个对象串行化,返一个字符串,调用了__sleep()方法,忽略没在数组中的属性$sex
    $p1_string = serialize($p1);
    echo $p1_string . "<br>"; //串行化的字符串我们通常不去解析

    $p2 = unserialize($p1_string); //反串行化形成对象$p2重新赋值$age为40
    $p2->say();
    ?>

上例输出值为:

O:6:"Person":2:{s:4:"name";s:4:"张三";s:3:"age";i:20;}
我的名子叫:张三 性别: 我的年龄是:40
文章来自 www.96net.com.cn

posted @ 2021-10-26 09:18  学无边涯  阅读(491)  评论(0编辑  收藏  举报