Blogger Information
Blog 40
fans 0
comment 1
visits 39805
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
_sleep(),wakeup()方法以及匿名类实战示例
Dong.
Original
641 people have browsed it

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

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

Correction status:qualified

Teacher's comments:__wakeup(),名称不对
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post