Blogger Information
Blog 17
fans 1
comment 0
visits 20127
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP的抽象类、接口、trait的总结以及综合示例
大A
Original
742 people have browsed it

抽象类

  • 抽象类不能被实例化
  • 抽象方法必须在抽象类内,抽象类可以没有抽象方法
  • 抽象方法不可以有方法体
  • 抽象类被继承后子类必须定义父类中的所有抽象方法,这些方法的访问控制不得低于父类

接口

  • 接口中定义的方法不能有方法体
  • 接口中不可以定义属性,可以定义常量
  • 继承接口的类中必须实现接口中定义的所有方法
  • 类可以实现多个接口
  • 接口可以用extends继承接口

Trait

  • 通过在类中使用use 关键字,声明要组合的Trait名称,具体的Trait的声明使用Trait关键词
  • trait里面可以使用:静态成员,抽象成员,普通成员.不能使用常量
  • Trait内的属性会和调用它的类内的同名的属性冲突
  • 优先顺序:当前类成员 > trait类成员 > 基类成员
  • 一个类可以组合多个Trait,通过逗号相隔
  • trait不能在接口中使用

综合示例演示

  1. <?php
  2. //在接口中定义一个常量和抽象方法
  3. interface Data
  4. {
  5. const array = [
  6. ['姓名' => '胡八一', '年龄' => 40, '性别' => '男'],
  7. ['姓名' => '杨雪丽', '年龄' => 32, '性别' => '男'],
  8. ['姓名' => '胡八一', '年龄' => 28, '性别' => '女'],
  9. ['姓名' => '王凯旋', '年龄' => 31, '性别' => '男'],
  10. ['姓名' => '大金牙', '年龄' => 45, '性别' => '男'],
  11. ];
  12. function result();
  13. }
  14. //定义一个trait,里面定义一个公用方法用于显示结果
  15. trait Display
  16. {
  17. protected function show_p($text)
  18. {
  19. printf('<hr><pre>%s</pre><hr>', print_r($text, true));
  20. }
  21. }
  22. //定义一个抽象类,该类引用了trait并定义了一个抽象方法
  23. abstract class Norm
  24. {
  25. use Display;
  26. abstract function format();
  27. }
  28. //定义一个工作类,内部的out方法接收Data类型的对象可以直接输出结果
  29. class Output
  30. {
  31. public function out(Data $obje)
  32. {
  33. $obje->result();
  34. }
  35. }
  36. //定义一个tab类,继承Norm类和Data接口,输出表格格式的数据
  37. class Tab extends Norm implements Data
  38. {
  39. public function format()
  40. {
  41. return array_reduce(
  42. Data::array,
  43. function ($a, $b) {
  44. return $a .= ('<tr>
  45. <th>' . $b['姓名'] . '</th>
  46. <th>' . $b['年龄'] . '</th>
  47. <th>' . $b['性别'] . '</th>
  48. </tr>');
  49. },
  50. '<table border="1" cellspacing="0"><tr><th>姓名</th><th>年龄</th><th>性别</th></tr>'
  51. );
  52. }
  53. public function result()
  54. {
  55. $this->show_p($this->format() . '</table>');
  56. }
  57. }
  58. //定义一个Textlist类,继承Norm类和Data接口,输出列表格式的数据
  59. class Textlist extends Norm implements Data
  60. {
  61. function format()
  62. {
  63. return array_reduce(
  64. Data::array,
  65. function ($a, $b) {
  66. return $a .= ($b['姓名'] . '年龄' . $b['年龄'] . '岁性别' . $b['性别'] . '</br>');
  67. }
  68. );
  69. }
  70. public function result()
  71. {
  72. $this->show_p($this->format());
  73. }
  74. }
  75. //实例化对象然后输出
  76. $tab = new Tab;
  77. $tlist = new Textlist;
  78. $out = new Output;
  79. $out->out($tab);
  80. $out->out($tlist);

输出结果

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