博主信息
博文 56
粉丝 1
评论 0
访问量 77600
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
__sleep及__wakeup使用实例及匿名类实战
零龙
原创
806人浏览过

__sleep

当一个对象被序列化后,会自动调用sleep方法,这个方法不接受参数,必须返回一个数组。
在执行之前首先serialize() 函数会首先检查是否存在一个魔术方法 sleep.如果存在,sleep()方法会先被调用, 然后才执行序列化操作。

__wakeup

反序列化一个对象后,php会自动调用wakeup,这个方法不需要参数,在反序列化时可以对类属性重赋值或隐藏。
示例

  1. <?php
  2. class User
  3. {
  4. public $name = '曹操';
  5. public $nation ='魏国';
  6. public $age = '58';
  7. public function __sleep()
  8. {
  9. return ['name','nation','age'];
  10. }
  11. //当外部序列化类实例的时候,会自动调用它,用来隐藏一些属性
  12. //serialize()被调用的时候自动执行它
  13. public function __wakeup()
  14. {
  15. $this->name ='刘备';
  16. $this->nation ='蜀国';
  17. }
  18. //外部反序列化的时候会被自动调用
  19. }
  20. $user = new User();
  21. //序列化数据的目的是将数据进行传输或保存
  22. file_put_contents('obj.txt',serialize($user));
  23. // 将类系列化后生成一个obj.txt文件保存
  24. $str = file_get_contents('obj.txt');
  25. //获取obj.txt文件赋值给$str
  26. echo '__sleep:序列化'.$str;
  27. echo "<hr>";
  28. // 反序列化
  29. $obj = unserialize($str);
  30. echo '__wakeup:姓名:'.$obj->name.' | 国家:'.$obj->nation.' | 年龄:'.$obj->age;

示例图:

匿名类实战

  1. <?php
  2. interface mDb
  3. {
  4. public function __construct(...$params);
  5. //实现数据库连接接口
  6. }
  7. $user = (new class('mysql:host=localhost;dbname=mysqli','root','142536') implements mDb
  8. {
  9. private $db = null;
  10. //定义一个空的链接
  11. public function __construct(...$params)
  12. {
  13. $this->db = new PDO($params[0],$params[1],$params[2]);
  14. //自动执行定义的私有属性赋值连接参数
  15. }
  16. public function select()
  17. {
  18. return $this->db->query('SELECT * FROM user LIMIT 1')->fetchAll(PDO::FETCH_ASSOC);
  19. }
  20. public function insert()
  21. {
  22. $sql ="INSERT `user` SET `username`='诸葛亮',`password`=sha1('142536'),`age`='38',`sex`='男',`email`='zgl@qq.com',`mobile`='13999999999'";
  23. return $this->db->query($sql) ? '添加成功':'添加失败';
  24. }
  25. public function update()
  26. {
  27. $sql ="UPDATE `user` SET `username`='刘备',`password`=sha1('142536'),`age`='42',`sex`='男',`email`='lb@qq.com',`mobile`='13777777777' WHERE id = 2";
  28. return $this->db->query($sql) ? '更新成功':'更新失败';
  29. }
  30. public function delete()
  31. {
  32. return $this->db->query('DELETE FROM `user` WHERE id>3') ? '删除成功':'删除失败';
  33. }
  34. }
  35. );
  36. print_r($user->select());
  37. echo "<hr>";
  38. print_r($user->insert());
  39. echo "<hr>";
  40. print_r($user->update());
  41. echo "<hr>";
  42. print_r($user->delete());

示例图:

批改老师:天蓬老师天蓬老师

批改状态:合格

老师批语:继续
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学