博客列表 >抽象类接口与trait的理解及应用!

抽象类接口与trait的理解及应用!

XFY_肆意De...
XFY_肆意De...原创
2020年07月30日 14:44:50701浏览
抽象类为什么要用抽象类,字面理解,就是只拿来当父类的类,应该给它定义成抽象类,不允许实例
好处:实现代码的分离,抽象类分离了设计实现 认为父类是设计类,子类是工作类意有的时候父类分离了部分代码,有些还是依靠父类来完成

在父类中,尽可能的使用protected 属性.来完成封装.

  1. 注意:在父类[设计类]中这么去写虽然没有错,但是按照程序的设计来说,这么写就是不对的,我们应该在抽象类中只保留一些抽象方法,让子类[工作类]来完成父类的工作!而不是如上图那样,在设计类中把活儿都干完了!这么是不对滴!

接口的概念:完全的分离了“设计与实现”;
  1. interface 关键字,专门声明接口![单接口];
  2. 接口里面的方法都是abstract的,不需要加abstract关键字
  3. 接口里面所有成员的访问控制都是public
  4. 接口中不需要属性,但允许常量存在,定义在接口中的常量,一般统称为:接口常量,接口常量不允许被修改。
  5. 接口还可以有接口的构造方法;

既然接口定义好了,那我们就需要实现它的类;[工作类]

接口中 访问接口中常量的方式是以:接口名::常量名

接口的继承:


接口与抽象类+mysql实战代码加深理解

  1. <?php
  2. #接口的应用场景3: 用抽象类实现接口;
  3. interface iDbbase
  4. {
  5. //新增
  6. public static function insert($db,$data);
  7. //修改
  8. public static function update($db,$optoins);
  9. //查询
  10. public static function select($db,$optoins=[]);
  11. //删除
  12. public static function delete($db,$where);
  13. }
  14. #实现类抽象类来充当
  15. abstract class aDb implements iDbbase
  16. {
  17. #抽象类充当接口实现类时,不用必须实现接口中的方法;
  18. #当实现类中的方法中有一些公共操作时,可以将这些操作放在中间的抽象类中实现`
  19. #使用单例模式来连接 创建类的唯一实例;
  20. protected static $db = null;
  21. public static function connect($dsn,$username,$password)
  22. {
  23. if(is_null(self::$db)){
  24. //如果当前连接对象是null,表示还没有连接数据库
  25. self::$db=new PDO($dsn,$username,$password);
  26. }
  27. return self::$db;
  28. }
  29. }
  30. class Db extends aDb
  31. {
  32. #插入:
  33. public static function insert($db,$data){
  34. if(!is_array($data)){
  35. die('非法参数,请检查后在输');
  36. }
  37. foreach($data as $value){
  38. $new[] =$value;
  39. }
  40. $sql = 'INSERT INTO `users` (`name`,`age`,`email`) VALUES(?,?,?)';
  41. $stmt = $db->prepare($sql);
  42. $stmt->execute($new);
  43. }
  44. //查询
  45. public static function select( $db, $optoins=[] )
  46. {
  47. return $db->query("SELECT * FROM `users` LIMIT 2")->fetchALL(PDO::FETCH_ASSOC);
  48. }
  49. //修改
  50. public static function update($db,$optoins){
  51. foreach($optoins as $value){
  52. $new[] =$value;
  53. }
  54. $sql= "UPDATE `users` set `name`=?,`age`=?,`email`=? where `id`=?";
  55. $stmt = $db->prepare($sql);
  56. $stmt->execute($new);
  57. }
  58. //删除
  59. public static function delete($db,$where){
  60. $sql = 'DELETE FROM `users` where `id`=?';
  61. $stmt = $db->prepare($sql);
  62. $stmt->execute([$where]);
  63. }
  64. }
  65. $config = [
  66. 'type' => $type ?? 'mysql',
  67. 'host' => $host ?? 'localhost',
  68. 'dbname' => $table ?? 'phpedu',
  69. 'charset' => $charset ?? 'utf8',
  70. 'port' => $port ?? '3306',
  71. 'username' => $username ?? 'root',
  72. 'password' => $password ?? '123456'
  73. ];
  74. $dsn =sprintf('%s:host=%s;dbname=%s;',$config['type'],$config['host'],$config['dbname']);
  75. $username =$config['username'];
  76. $password =$config['password'];
  77. $db=Db::connect($dsn,$username,$password);
  78. //insert操作
  79. $data=[
  80. 'name'=>'李四',
  81. 'age' =>100,
  82. 'email' =>'163@.com'
  83. ];
  84. Db::insert($db,$data);
  85. //查询操作 不带条件的.
  86. // foreach(Db::select($db) as $user){
  87. // print_r($user);
  88. // }
  89. //修改
  90. $optoins=[
  91. 'name'=>'四',
  92. 'age' =>200,
  93. 'email' =>'222@.com',
  94. 'id' =>4
  95. ];
  96. Db::update($db,$optoins);
  97. //删除
  98. $where= 11;
  99. Db::delete($db,$where);
总结:通过用抽象类来实现接口+数据库的CRUD操作.
trait 解释:理解为组件,扩展用的…


在这里的话,需要引用的时候,就使用trait来将类打包成一个零件,,用use关键字导入即可!

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