Blogger Information
Blog 87
fans 1
comment 0
visits 59165
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
抽象类与接口实战
阿杰
Original
686 people have browsed it

实战准备

1.接口的应用场景:用抽象类来实现接口

  1. // 定义一个数据库的CURD接口
  2. interface iDBase
  3. {
  4. // 新增
  5. public static function insert($db,$data);
  6. // 查询
  7. public static function select($db,$options=[]);
  8. // 更新
  9. public static function update($db,$options=[]);
  10. // 删除
  11. public static function delete($db,$where);
  12. }
  13. // 实现类使用抽象类来充当
  14. // class Db implements iDBase
  15. abstract class aDb implements iDBase
  16. {
  17. // 使用单例模式连接:创建类的唯一实例,唯一对象
  18. protected static $db = null;
  19. // 抽象类充当接口实现类时,不用必须实现接口中的抽象方法
  20. // 当实现类中的方法中有一些公共操作时,可以将这些操作放在中间的抽象类中实现它
  21. // // 新增
  22. // public static function insert($db,$data){}
  23. // // 查询
  24. // public static function select($db,$options=[]){}
  25. // // 更新
  26. // public static function update($db,$options=[]){}
  27. // // 删除
  28. // public static function delete($db,$where){}
  29. public static function connect($dsn,$username,$password)
  30. {
  31. if(is_null(self::$db)){
  32. // 如果当前连接对象是null,表示未连接数据库
  33. self::$db = new PDO($dsn,$username,$password);
  34. }
  35. return self::$db;
  36. }
  37. }
  38. // 类的真正实现类
  39. class DB extends aDb
  40. {
  41. // 新增
  42. public static function insert($db,$data){
  43. }
  44. // 查询
  45. public static function select($db,$options=[]){
  46. return $db->query('SELECT * FROM `tp_user` LIMIT 3')->fetchAll(PDO::FETCH_ASSOC);
  47. }
  48. // 更新
  49. public static function update($db,$options=[]){
  50. // return $db->query('INSERT `users` SET `name`=?, `email`= ?, `password`=?;')
  51. }
  52. // 删除
  53. public static function delete($db,$where){}
  54. }
  55. // 客户端代码
  56. // 连接参数
  57. $config = [
  58. // 类型
  59. 'type' => $type ?? 'mysql',
  60. // 默认数据库主机名(IP)
  61. 'host' => $host ?? 'localhost',
  62. // 默认数据库名
  63. 'dbname' => $type ?? 'tp5',
  64. // 默认字符编码集
  65. 'charset' => $type ?? 'utf8',
  66. // 默认端口号
  67. 'port' => $type ?? '3306',
  68. // 默认用户名
  69. 'username' => $username ?? 'root',
  70. // 默认用户的密码
  71. 'password' => $password ?? 'root'
  72. ];
  73. $dsn = sprintf('%s:host=%s;dbname=%s',$config['type'],$config['host'],$config['dbname']);
  74. $username = $config['username'];
  75. $password = $config['password'];
  76. $db = DB::connect($dsn,$username,$password);
  77. // 调用实现类DB中的select()进行查询
  78. foreach(DB::select($db) as $user){
  79. print_r($user);
  80. }


2.新增数据(insert)

  1. // 类的真正实现类
  2. class DB extends aDb
  3. {
  4. // 新增
  5. public static function insert($db,$data){
  6. $sql = 'INSERT `tp_user` SET `username`=?,`password`=?,`age`=?;';
  7. $stmts = $db->prepare($sql);
  8. $stmts->execute($data);
  9. return '成功新增'.$stmts->rowCount().'条记录!';
  10. }
  11. // 查询
  12. public static function select($db,$options=[]){
  13. return $db->query('SELECT * FROM `tp_user` LIMIT 3')->fetchAll(PDO::FETCH_ASSOC);
  14. }
  15. // 更新
  16. public static function update($db,$options=[]){
  17. // return $db->query('INSERT `users` SET `name`=?, `email`= ?, `password`=?;')
  18. }
  19. // 删除
  20. public static function delete($db,$where){}
  21. }
  22. // 调用实现类DB中的insert()进行插入数据
  23. $data = ['小花','xiaohua',18];
  24. $res = DB::insert($db,$data);
  25. echo $res;


3.更新数据(update)

  1. // 类的真正实现类
  2. class DB extends aDb
  3. {
  4. // 新增
  5. public static function insert($db,$data){
  6. $sql = 'INSERT `tp_user` SET `username`=?,`password`=?,`age`=?;';
  7. $stmts = $db->prepare($sql);
  8. $stmts->execute($data);
  9. return '成功新增'.$stmts->rowCount().'条记录!';
  10. }
  11. // 查询
  12. public static function select($db,$options=[]){
  13. return $db->query('SELECT * FROM `tp_user` LIMIT 3')->fetchAll(PDO::FETCH_ASSOC);
  14. }
  15. // 更新
  16. public static function update($db,$data){
  17. $sql = 'UPDATE `tp_user` SET `username`=?,`age`=? WHERE `id`=?;';
  18. $stmts = $db->prepare($sql);
  19. $stmts->execute($data);
  20. return '成功更新'.$stmts->rowCount().'条记录!';
  21. }
  22. // 删除
  23. public static function delete($db,$where){}
  24. }


4.删除数据(delete)

  1. // 类的真正实现类
  2. class DB extends aDb
  3. {
  4. // 新增
  5. public static function insert($db,$data){
  6. $sql = 'INSERT `tp_user` SET `username`=?,`password`=?,`age`=?;';
  7. $stmts = $db->prepare($sql);
  8. $stmts->execute($data);
  9. return '成功新增'.$stmts->rowCount().'条记录!';
  10. }
  11. // 查询
  12. public static function select($db,$options=[]){
  13. return $db->query('SELECT * FROM `tp_user` LIMIT 3')->fetchAll(PDO::FETCH_ASSOC);
  14. }
  15. // 更新
  16. public static function update($db,$data){
  17. $sql = 'UPDATE `tp_user` SET `username`=?,`age`=? WHERE `id`=?;';
  18. $stmts = $db->prepare($sql);
  19. $stmts->execute($data);
  20. return '成功更新'.$stmts->rowCount().'条记录!';
  21. }
  22. // 删除
  23. public static function delete($db,$where){
  24. $sql = 'DELETE FROM `tp_user` WHERE `id`=?;';
  25. $stmts = $db->prepare($sql);
  26. $stmts->execute($where);
  27. return '成功删除'.$stmts->rowCount().'条记录!';
  28. }
  29. }
  30. // 调用实现类DB中的delete()进行数据删除
  31. $data = [3];
  32. $res = DB::delete($db,$data);
  33. echo $res;


5.这里的接口好像没啥直接影响,删除也没关系

  1. interface iDBase
  2. {
  3. // 新增
  4. // public static function insert($db,$data);
  5. // 查询
  6. // public static function select($db,$options=[]);
  7. // 更新
  8. // public static function update($db,$data);
  9. // 删除
  10. // public static function delete($db,$where);
  11. }
Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:完成的非常好
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