博主信息
博文 40
粉丝 0
评论 1
访问量 50066
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
_sleep(),wakeup()方法以及匿名类实战示例
Dong.
原创
872人浏览过

1._sleep()方法以及wakeup()魔术方法实例演示

  1. <?php
  2. class user {
  3. public $name;
  4. public $id;
  5. function __construct() { // 给id成员赋一个uniq id
  6. $this->id = 123;
  7. }
  8. function __sleep() { //此处不串行化id成员
  9. return(array('name'));
  10. }
  11. function __wakeup() {
  12. $this->id = 123;
  13. }
  14. }
  15. //实例化user()
  16. $i = new user();
  17. $i->name = "Leo";
  18. $s = serialize($i); //serialize序列化对象i,此处不序列化id属性,id值被抛弃
  19. $u2 = unserialize($s); //unserialize发序列化,id值被重新赋值
  20. print_r($i);
  21. echo '<br>';
  22. print_r($u2);

输出结果:


2.匿名类示例

2.1匿名类的三种使用方法

  1. <?php
  2. //匿名类的三种使用方法
  3. // 1.直接定义一个匿名类
  4. $objA = new class
  5. {
  6. public function getName()
  7. {
  8. echo "Hello I'm peret";
  9. }
  10. };
  11. $objA->getName();
  12. echo '<br>';
  13. // 2.在方法中返回
  14. function testA()
  15. {
  16. return new class
  17. {
  18. public function getName()
  19. {
  20. echo "Hello I'm peret obj";
  21. }
  22. };
  23. }
  24. $objB = testA();
  25. $objB->getName();
  26. echo '<br>';
  27. //3. 作为参数
  28. function testB($testBobj)
  29. {
  30. echo $testBobj->getName();
  31. }
  32. testB(new class{
  33. public function getName()
  34. {
  35. echo "php.cn";
  36. }
  37. });

输出结果:


3 利用匿名类完成增查删更操作

数据库信息:

3.1匿名类mysqli查询操作

  1. <?php
  2. // 匿名类的应用场景
  3. //匿名类查询操作
  4. interface iDb
  5. {
  6. public function __construct(...$params);
  7. }
  8. // 2. mysqli方式
  9. //使用匿名类查询操作
  10. $sql = (new class ('localhost','admin','huicheng123','admin') implements iDb {
  11. private $mysqli;
  12. public function __construct (...$params)
  13. {
  14. $this->mysqli = new mysqli($params[0],$params[1],$params[2],$params[3]);
  15. }
  16. public function select ()
  17. {
  18. return $this->mysqli->query("SELECT `name`,`email`,`password`,`time` FROM `users`")->fetch_all(MYSQLI_ASSOC);
  19. $this->mysqli->close();
  20. }
  21. }) -> select();
  22. foreach ($sql as $v) {
  23. vprintf('| 用户名: %s | 邮箱: %s | 密码: %s | 电话: %s' . '<br>',$v);
  24. }

输出结果:

3.2匿名类mysqli删除操作

  1. <?php
  2. // 匿名类的应用场景
  3. // 1. 实现接口的部分功能
  4. interface iDb
  5. {
  6. public function __construct(...$params);
  7. }
  8. //2.匿名类删除操作
  9. // 2. mysqli方式
  10. $delete2 = (new class ('localhost','admin','huicheng123','admin') implements iDb
  11. {
  12. private $mysqli;
  13. public function __construct (...$params)
  14. {
  15. $this->mysqli = new mysqli($params[0],$params[1],$params[2],$params[3]);
  16. }
  17. public function delete2 ()
  18. {
  19. $this->mysqli->query("DELETE FROM `users` WHERE `id`='7'");
  20. $this->mysqli->close();
  21. }
  22. })->delete2();

输出结果:

与原数据库对比id为7的欧阳克被删除了

3.2匿名类mysqli更新操作

  1. <?php
  2. // 匿名类的应用场景
  3. // 1. 实现接口的部分功能
  4. interface iDb
  5. {
  6. public function __construct(...$params);
  7. }
  8. //2.匿名类跟新操作
  9. // 2. mysqli方式
  10. $delete2 = (new class ('localhost','admin','huicheng123','admin') implements iDb
  11. {
  12. private $mysqli;
  13. public function __construct (...$params)
  14. {
  15. $this->mysqli = new mysqli($params[0],$params[1],$params[2],$params[3]);
  16. }
  17. public function delete2 ()
  18. {
  19. $this->mysqli->query("UPDATE `users` SET `name`='灭绝老师',`email`='miejue@php.cn' WHERE `id`=5");
  20. }
  21. })->delete2();
  22. echo $mysqli->affected_rows;
  23. print_r($delete2);

输出结果:

朱老师被更新成灭绝老师

总结

  • serialize函数:将数据序列化

    • 作用:保存或传递数据
    • file_put_contents():将一个序列化的数据保存到一个文件中
  • unserialize函数:将一个数据反序列化(反序列化:将字符串还原成对象)

  • 学习到了_sleep()方法以及warkup()方法

    • _sleep()方法:将对象序列化时自动调用,可以用于清理对象
    • wakeup()方法:反序列化时调用或类似的操作,例重新建立数据库连接或执行其他初始化操作
  • 学习了匿名类的使用场景,便于数据的一次性使用

    • 实现接口
    • 继承抽象类
    • 匿名类仅没有名字,可以实现各种功能,可以被直接定义,方法中返回,也可以作为参数
批改老师:天蓬老师天蓬老师

批改状态:合格

老师批语:__wakeup(),名称不对
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系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+教程免费学