博客列表 >PHP基础-类继承的三大功能/抽象类的作用与实现/接口的基本语法

PHP基础-类继承的三大功能/抽象类的作用与实现/接口的基本语法

岂几岂几
岂几岂几原创
2020年05月01日 01:03:35784浏览

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

  • 继承: 父类的二类成员自动成为子类的成员
  • 重写: 覆写与父类/基类同名的成员(属性, 方法)
  • 扩展: 子类添加自身的方法来增加/扩展父类的功能
  1. /** 示例演示类继承的三大功能 */
  2. // 基类:Animal
  3. abstract class Animal
  4. {
  5. public $type = '哺乳动物';
  6. protected $name = '';
  7. /**
  8. * 介绍自己
  9. */
  10. public function adviceMyself()
  11. {
  12. return '我是' . $this->name;
  13. }
  14. }
  15. /**
  16. * 继承
  17. * 实现类:Dog
  18. */
  19. class Dog extends Animal
  20. {
  21. /**
  22. * 属性重写
  23. */
  24. public $name = '狗';
  25. /**
  26. * 扩展基类
  27. */
  28. public function WagTail()
  29. {
  30. return '摇尾巴~~~';
  31. }
  32. }
  33. /**
  34. * 继承
  35. * 实现类:Cat
  36. */
  37. class Cat extends Animal
  38. {
  39. public $name = '猫';
  40. /**
  41. * 重写父类方法
  42. */
  43. public function adviceMyself()
  44. {
  45. return '我是' . $this->name . ', 我属于' . $this->type . ', 我会' . $this->howl();
  46. }
  47. }
  48. /* 汤姆 */
  49. $tom = new Cat;
  50. /* 史努比 */
  51. $snoopy = new Dog;
  52. // 介绍自己
  53. /* 汤姆介绍自己,调用重写父类的方法 */
  54. echobr($tom->adviceMyself());
  55. /* 史努比介绍自己,调用继承自父类的方法 */
  56. echobr($snoopy->adviceMyself());
  57. // 史努比摇尾巴,扩展父类没有的方法
  58. echobr($snoopy->WagTail());
  59. /*
  60. result:
  61. 我是猫, 我属于哺乳动物, 我会喵喵喵~~~
  62. 我是狗
  63. 喵喵喵~~~
  64. 汪汪汪~~~
  65. 摇尾巴~~~
  66. */

2. 抽象类的作用与实现

  1. - - 抽象类的作用: 部分分离了声明与实现, 声明在抽象类中完成, 实现在工作类中完成.
  1. /** 实例演示抽象类的作用与实现 */
  2. // 基类:动物类
  3. abstract class Animal
  4. {
  5. public $type = '哺乳动物';
  6. protected $name = '';
  7. // 不同动物叫的方式不一样,所以定义为抽象方法
  8. abstract public function howl();
  9. }
  10. // 实现类
  11. /* 狗 */
  12. class Dog extends Animal
  13. {
  14. public $name = '狗';
  15. public function howl()
  16. {
  17. return '汪汪汪~~~';
  18. }
  19. }
  20. /* 猫 */
  21. class Cat extends Animal
  22. {
  23. public $name = '猫';
  24. public function howl()
  25. {
  26. return '喵喵喵~~~';
  27. }
  28. }
  29. /* 史努比 */
  30. $snoopy = new Dog;
  31. echobr($snoopy->name . '的叫声是:' . $snoopy->howl());
  32. /* 汤姆 */
  33. $tom = new Cat;
  34. echobr($tom->name . '的叫声是:' . $tom->howl());
  35. /*
  36. result:
  37. 狗的叫声是:汪汪汪~~~
  38. 猫的叫声是:喵喵喵~~~
  39. */

3. 接口的基本语法

  1. - 接口完全分离了声明与实现
  2. - 接口使用关键字: interface
  3. - 接口中定义的成员必须是public
  4. - 接口允许多继承, 从而间接实现PHP的多继承
  1. // 定义接口
  2. interface Itf1
  3. {
  4. // 定义接口常量
  5. const MAX = 65535;
  6. // 定义抽象方法(不需要abstract关键字)
  7. public function func1();
  8. }
  9. class Demo1 implements Itf1
  10. {
  11. // 实现接口的抽象方法
  12. public function func1()
  13. {
  14. return __CLASS__ . '类的' . __METHOD__ . '方法';
  15. }
  16. }
  17. // 使用接口中的常量
  18. echobr(Itf1::MAX);
  19. // 调用实现了接口的方法
  20. echobr((new Demo1)->func1());
  21. /*
  22. result:
  23. 65535
  24. Demo1类的Demo1::func1方法
  25. */

4. 学习心得

  • 类方法: 也是类成员之一, 就是类中的函数. 大概可以分为普通方法和静态方法和魔术方法. 普通方法可以访问类中定义的所有属性; 静态方法直接用类名调用, 被所有实例共享使用, 静态方法中不能使用$this关键字, 所以静态方法无法访问类中定义的非静态属性; 魔术方法暂未学到.
  • 类成员的访问控制: 有公开成员(public), 受保护的成员(protected)和私有成员(private)三种.
    1. public: 公开成员,默认值, 类外部, 类内部, 以及类的子类中(类的继承上下文环境中), 访问控制符缺省情况下, 默认为public.
    2. protected: 受保护的成员, 类外部禁止访问, 但是类的内部以及它的继承上下文中可以访问.
    3. private: 私有成员, 除了当前类可以访问, 类的外部以及类的继承上下文中都禁止访问
  • 类继承的三大功能: 继承, 重写, 扩展
    1. 继承: 父类的二类(public/protected)成员自动成为子类的成员
    2. 重写: 覆写与父类/基类同名的成员(属性, 方法)
    3. 扩展: 子类添加自身的方法来增加/扩展父类的功能
  • 抽象类
    • 部分分离了声明与实现, 声明在抽象类中完成, 实现在工作类中完成. 个人理解, 它实现了一类事物通用的功能方法; 而个性化的功能, 则只做声明, 并不提供实现. 由其子类来实现个性化的功能方法.
  • 接口
    • 完全分离了声明与实现. 它比抽象类更进一步, 只规定了某一类事物需要有的功能, 但并不给出具体实现. 使用接口可以隐藏业务功能的实现.
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议