博客列表 >抽象类与接口实战

抽象类与接口实战

阿杰
阿杰原创
2020年07月25日 18:08:49691浏览

实战准备

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. }
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议