Blogger Information
Blog 57
fans 3
comment 0
visits 60504
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP基础-类继承的三大功能/抽象类的作用与实现/接口的基本语法
岂几岂几
Original
785 people have browsed it

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. 扩展: 子类添加自身的方法来增加/扩展父类的功能
  • 抽象类
    • 部分分离了声明与实现, 声明在抽象类中完成, 实现在工作类中完成. 个人理解, 它实现了一类事物通用的功能方法; 而个性化的功能, 则只做声明, 并不提供实现. 由其子类来实现个性化的功能方法.
  • 接口
    • 完全分离了声明与实现. 它比抽象类更进一步, 只规定了某一类事物需要有的功能, 但并不给出具体实现. 使用接口可以隐藏业务功能的实现.
Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:OOP编程的核心, 咱们实际上都接触到了, 继续加油
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