当前位置:Gxlcms > PHP教程 > PHP中 __wakeup()方法详解

PHP中 __wakeup()方法详解

时间:2021-07-01 10:21:17 帮助过:28人阅读

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

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

那么为什么呢?

因为:

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

作用:

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

还是看代码:

  1. <?php
  2. class Person
  3. {
  4. public $sex;
  5. public $name;
  6. public $age;
  7. public function __construct($name="", $age=25, $sex='男')
  8. {
  9. $this->name = $name;
  10. $this->age = $age;
  11. $this->sex = $sex;
  12. }
  13. /**
  14. * @return array
  15. */
  16. public function __sleep() {
  17. echo "当在类外部使用serialize()时会调用这里的__sleep()方法<br>";
  18. $this->name = base64_encode($this->name);
  19. return array('name', 'age'); // 这里必须返回一个数值,里边的元素表示返回的属性名称
  20. }
  21. /**
  22. * __wakeup
  23. */
  24. public function __wakeup() {
  25. echo "当在类外部使用unserialize()时会调用这里的__wakeup()方法<br>";
  26. $this->name = 2;
  27. $this->sex = '男';
  28. // 这里不需要返回数组
  29. }
  30. }
  31. $person = new Person('小明'); // 初始赋值
  32. var_dump(serialize($person));
  33. var_dump(unserialize(serialize($person)));

运行结果:

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

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

人气教程排行