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 @   学无边涯  阅读(541)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
历史上的今天:
2020-10-26 Less 数学函数用法
2020-10-26 Less 列表函数用法
2020-10-26 Less 字符串函数用法
2020-10-26 Less 注释和导入规则用法
2020-10-26 Less 映射(Maps)和 作用域(Scope)用法
2020-10-26 Less 命名空间和访问符用法
2020-10-26 Less 转义的用法
点击右上角即可分享
微信分享提示