博客列表 >PHP的抽象类、接口、trait的总结以及综合示例

PHP的抽象类、接口、trait的总结以及综合示例

大A
大A原创
2020年04月30日 03:40:01739浏览

抽象类

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

接口

  • 接口中定义的方法不能有方法体
  • 接口中不可以定义属性,可以定义常量
  • 继承接口的类中必须实现接口中定义的所有方法
  • 类可以实现多个接口
  • 接口可以用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);

输出结果

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