博客列表 >PHP 抽象类与接口

PHP 抽象类与接口

司马青衫
司马青衫原创
2020年07月26日 12:45:481010浏览

PHP 抽象类与接口

  • 抽象类:部分的分离了设计与实现
    • 抽象类为设计类,使用关键字abstract声明,不应该被实例化
    • 类属性如果需要在子类中使用应设置为protected,否则为private
    • 抽象属性:没有被赋值的类属性为抽象属性
    • 抽象方法:只声明不实现,但在子类中必须实现
  • 接口:完全分离设计与实现,使用interface声明
    • 在接口中所有成员都是抽象的,可以不写abstract关键字
    • 接口成员的访问控制必须是public
    • 在接口中不允许有属性但允许有接口常量
    • 使用implements关键字来实现接口
    • 接口中的抽象方法在实现类中必须实现,在抽象类中不必实现
    • 接口支持多继承

作业:使用接口与抽象类实现数据库的增删查改

  • 自己动手将 demo4.php 中的除了 select 方法之外其它三个方法实现了:update,delete,insert
  1. <?php
  2. //接口 定义数据库的增删查改操作
  3. interface iDB_curd{
  4. //使用静态方法避免实例化
  5. public static function Insert($db, $options);
  6. public static function Delete($db, $where);
  7. public static function Select($db, $where);
  8. public static function Update($db, $options);
  9. }
  10. //抽象类 实现数据库操作接口 定义数据库连接
  11. abstract class aDB_con implements iDB_curd{
  12. //使用单例模式连接:创建类的唯一实例,唯一对象
  13. protected static $db = null;
  14. //连接数据库
  15. public static function connect($dsn, $username, $password){
  16. if(is_null(self::$db)){
  17. //如果当前连接对象时null 表示当前未连接数据库
  18. self::$db = new PDO($dsn, $username, $password);
  19. }
  20. return self::$db;
  21. }
  22. }
  23. //实现类 数据库增删查改的操作实现
  24. class DB_curd extends aDB_con{
  25. //使用静态方法避免实例化
  26. public static function Insert($db, $options){
  27. $sql = "INSERT `user` SET `username`=?, `password`=?, `age`=?";
  28. $stmt = $db->prepare($sql);
  29. $stmt->execute($options);
  30. return sprintf("新增了%d条记录,主键ID:%d<br>", $stmt->rowCount(),$db->lastInsertId());
  31. }
  32. public static function Delete($db, $where){
  33. $sql = "DELETE FROM `user` WHERE `id`=?";
  34. $stmt = $db->prepare($sql);
  35. $stmt->execute($where);
  36. return "删除成功 ".$stmt->rowCount()."条记录<br>";
  37. }
  38. public static function Select($db, $where){
  39. $sql = "SELECT `id`,`username`,`age` FROM `user` WHERE `age`>?";
  40. $stmt = $db->prepare($sql);
  41. $stmt->execute($where);
  42. return $stmt->fetchALL(PDO::FETCH_ASSOC);
  43. }
  44. public static function Update($db, $options){
  45. $sql = "UPDATE `user` SET `username`=?, `password`=?, `age`=? WHERE id=?";
  46. $stmt = $db->prepare($sql);
  47. $stmt->execute($options);
  48. return "更新成功 ".$stmt->rowCount()."条记录<br>";
  49. }
  50. }
  51. $config = require __DIR__.'/../0720/config.php';
  52. extract($config);
  53. //$dsn:数据源名称
  54. $dsn = "{$type}:host={$host};dbname={$dbname};charset={$charset};port={$port}";
  55. $db = aDB_con::connect($dsn, $username, $password);
  56. echo DB_curd::Insert($db, ['abstract', md5('abstract'), 12]);
  57. echo DB_curd::Delete($db, [69]);
  58. echo DB_curd::Update($db, ['interface', md5('interface'), 22, 73]);
  59. $user = DB_curd::Select($db, [12]);
  60. foreach($user as $v){
  61. vprintf('%d, %s, %d<br>', $v);
  62. }

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