Blogger Information
Blog 21
fans 0
comment 1
visits 19261
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
抽象类接口与trait的理解及应用!
XFY_肆意De...
Original
714 people have browsed it
抽象类为什么要用抽象类,字面理解,就是只拿来当父类的类,应该给它定义成抽象类,不允许实例
好处:实现代码的分离,抽象类分离了设计实现 认为父类是设计类,子类是工作类意有的时候父类分离了部分代码,有些还是依靠父类来完成

在父类中,尽可能的使用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关键字导入即可!

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