__wakeup(),执行unserialize()时,先会调用这个函数

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

那么为什么呢?

因为:

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

作用:

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

还是看代码:

<?phpclass 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) }

更多相关文章

  1. PHP中 __toString()方法详解
  2. PHP之十六个魔术方法详解(总结)
  3. php中定义常量的两种方法
  4. 使用PHP多维数组重组方法,兼容API接口
  5. php 字符串替换方法
  6. php魔术常量使用方法
  7. php优化方法
  8. php数组去重的方法
  9. php引入文件的四个方法

随机推荐

  1. 【Android】Android取消EditText自动获取
  2. Android NDK学习记录(一)
  3. android应用程序键盘事件机制
  4. 报错You need to use a Theme.AppCompat
  5. 【android初级】之android布局属性详解
  6. Android Layout属性详解
  7. 布局技巧和列表控件
  8. Android ScrollView滚动条
  9. android sdk的快速安装法
  10. Android基本控件TextView