• 技术文章 >后端开发 >php教程

    PHP中 __wakeup()方法详解

    藏色散人藏色散人2019-07-24 14:00:57原创7147
    __wakeup(),执行unserialize()时,先会调用这个函数

    如果说 __sleep() 是白的,那么 __wakeup() 就是黑的了。

    那么为什么呢?

    因为:

    与之相反,`unserialize()` 会检查是否存在一个 `__wakeup()` 方法。如果存在,则会先调用 `__wakeup` 方法,预先准备对象需要的资源。

    作用:

    __wakeup() 经常用在反序列化操作中,例如重新建立数据库连接,或执行其它初始化操作。

    还是看代码:

    <?php
    class Person
    {
        public $sex;
        public $name;
        public $age;
        public function __construct($name="",  $age=25, $sex='男')
        {
            $this->name = $name;
            $this->age  = $age;
            $this->sex  = $sex;
        }
        /**
         * @return array
         */
        public function __sleep() {
            echo "当在类外部使用serialize()时会调用这里的__sleep()方法<br>";
            $this->name = base64_encode($this->name);
            return array('name', 'age'); // 这里必须返回一个数值,里边的元素表示返回的属性名称
        }
        /**
         * __wakeup
         */
        public function __wakeup() {
            echo "当在类外部使用unserialize()时会调用这里的__wakeup()方法<br>";
            $this->name = 2;
            $this->sex = '男';
            // 这里不需要返回数组
        }
    }
    $person = new Person('小明'); // 初始赋值
    var_dump(serialize($person));
    var_dump(unserialize(serialize($person)));

    运行结果:

    当在类外部使用serialize()时会调用这里的__sleep()方法
    string(58) "O:6:"Person":2:{s:4:"name";s:8:"5bCP5piO";s:3:"age";i:25;}" 当在类外部使用serialize()时会调用这里的__sleep()方法
    当在类外部使用unserialize()时会调用这里的__wakeup()方法
    object(Person)#2 (3) { ["sex"]=> string(3) "男" ["name"]=> int(2) ["age"]=> int(25) }

    以上就是PHP中 __wakeup()方法详解的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:wakeup()
    上一篇:PHP中__sleep()方法详解 下一篇:PHP中 __toString()方法详解
    大前端线上培训班

    相关文章推荐

    • php 魔术方法 sleep() wakeup()• php 魔术方法 __sleep __wakeup __toString __debuginfo• PHP 魔术方法: __sleep __wakeup• PHP面向对象-对象串行化serialize(),__sleep(),__wakeup() 的代码详解

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网