博客列表 >PHP基础:类继承、抽象类与接口

PHP基础:类继承、抽象类与接口

暴宇
暴宇原创
2020年05月30日 21:51:161141浏览

PHP基础:类继承、抽象类与接口

1.类继承的三大功能:继承, 重写, 扩展

继承: 父类的二类成员自动成为子类的成员
重写: 覆写与父类/基类同名的成员(属性, 方法)
扩展: 子类添加自身的方法来增加/扩展父类的功能

  1. // 父类
  2. class fatherclass{
  3. // 常规类属性
  4. public $father='父类常规属性值';
  5. public $father1='准备被子类复写的父类常规属性';
  6. // 静态类属性
  7. public static $sfather='父类静态属性值';
  8. // 常规类方法
  9. public function fatherfun(){
  10. // 返回常规属性
  11. return '父类常规方法:'.__FUNCTION__;
  12. }
  13. // 准备被子类复写的常规类方法
  14. public function fatherfun1(){
  15. return '父类常规方法:'.__FUNCTION__;
  16. }
  17. // 静态类方法
  18. public static function sfatherfun(){
  19. return '父类静态方法:'.__FUNCTION__;
  20. }
  21. }
  22. // 子类
  23. class sonclass extends fatherclass{
  24. // 1、继承功能:子类中可直接调用父类中的属性及方法
  25. // 实例化子类后即可直接访问父类中的属性和方法
  26. // 2、重写功能:子类中可对父类中的属性及方法进行重写
  27. // 属性重写:
  28. public $father1='被子类重写的父类属性值';
  29. // 方法重写:
  30. public function fatherfun1(){
  31. return '被子类重写的方法:'.__FUNCTION__;
  32. }
  33. // 3、扩展功能:子类可对父类中的属性和方法进行扩展
  34. // 属性扩展:
  35. public $son='子类扩展的属性值';
  36. // 方法扩展:
  37. public function sonfun(){
  38. return '子类扩展的方法:'.__FUNCTION__;
  39. }
  40. }
  41. // 实例化子类
  42. $sonclass=new sonclass;
  43. // 直接访问父类常规属性
  44. echo '直接访问父类常规属性:',$sonclass->father,'<hr>';
  45. // 直接访问父类静态属性
  46. echo '直接访问父类静态属性:',$sonclass::$sfather,'<hr>';
  47. // 直接访问父类常规方法
  48. echo '直接访问父类常规方法:',$sonclass->fatherfun(),'<hr>';
  49. // 直接访问父类静态方法
  50. echo '直接访问父类静态方法:',$sonclass::sfatherfun(),'<hr>';
  51. // 访问子类改写父类的属性
  52. echo '访问被子类改写的父类属性:',$sonclass->father1,'<hr>';
  53. // 访问子类改写父类的方法
  54. echo '访问被子类改写的父类方法:',$sonclass->fatherfun1(),'<hr>';
  55. // 访问子类扩展的属性
  56. echo '访问子类扩展的属性:',$sonclass->son,'<hr>';
  57. // 访问子类扩展的方法
  58. echo '访问子类扩展的方法:',$sonclass->sonfun(),'<hr>';

2. 实例演示抽象类的作用与实现

抽象类的作用:部分分离了设计与实现,将设计抽象化,待到实现时再具象化

  1. // 设计(抽象类),用关键字abstract声明抽象类
  2. abstract class absclass{
  3. // 抽象属性
  4. protected $absname;
  5. // 抽象方法
  6. abstract protected function absfun();
  7. }
  8. // 实现(工作类),用关键字extends继承
  9. class jobclass extends absclass{
  10. // 抽象属性的实现:给属性赋值
  11. public $absname='被实现的属性值';
  12. // 抽象方法的实现:写上方法体
  13. public function absfun(){
  14. return '被实现的抽象方法:'.__FUNCTION__;
  15. }
  16. }
  17. // 实例化工作类
  18. $jobclass=new jobclass;
  19. // 访问工作类属性
  20. echo '访问工作类属性:',$jobclass->absname,'<hr>';
  21. // 访问工作类方法
  22. echo '访问工作类方法:',$jobclass->absfun(),'<hr>';

3.实例演示接口的基本语法

接口: 完全分离了”设计与实现”
使用关键字: interface 来声明接口
使用与类相似的语法: 抽象方法, 常量, 构造方法(魔术方法的一种)
默认访问控制必须是public
接口允许多继承, 从而间接实现了PHP的多继承

  1. // 设计(接口):完全分离了设计与实现,interface
  2. interface iface{
  3. // 接口常量:用关键字const声明
  4. const MY='接口常量值';
  5. // 接口方法
  6. public function ifun();
  7. }
  8. // 实现(工作类),用关键字implements继承接口
  9. class job implements iface{
  10. public $myname='工作类属性值';
  11. public function ifun(){
  12. return '工作类中实现的接口方法:'.__FUNCTION__;
  13. }
  14. }
  15. // 实例化工作类
  16. $job=new job;
  17. // 访问接口常量
  18. echo '访问接口常量:',iface::MY,'<hr>';
  19. // 访问工作类中的属性
  20. echo '访问工作类中的属性:',$job->myname,'<hr>';
  21. // 访问在工作类中实现的接口方法
  22. echo '访问在工作类中实现的接口方法:',$job->ifun(),'<hr>';

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