Blogger Information
Blog 29
fans 0
comment 0
visits 27276
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP基础:类继承、抽象类与接口
暴宇
Original
1140 people have browsed it

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>';

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:全部作业务必在6月10日前完成
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