Blogger Information
Blog 30
fans 0
comment 2
visits 29250
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP 抽象类与接口
司马青衫
Original
1001 people have browsed it

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. }

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