PHP中 __wakeup()方法详解

互联网 19-7-24
__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()方法详解的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: wakeup()
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:PHP中__sleep()方法详解

相关资讯