博客列表 >_sleep(),wakeup()方法以及匿名类实战示例

_sleep(),wakeup()方法以及匿名类实战示例

Dong.
Dong.原创
2020年07月31日 15:04:38642浏览

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()方法:反序列化时调用或类似的操作,例重新建立数据库连接或执行其他初始化操作
  • 学习了匿名类的使用场景,便于数据的一次性使用

    • 实现接口
    • 继承抽象类
    • 匿名类仅没有名字,可以实现各种功能,可以被直接定义,方法中返回,也可以作为参数
上一条:PHP命名空间下一条:HTML文档结构
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议