Blogger Information
Blog 17
fans 1
comment 0
visits 14497
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP基础: 接口与抽象类
zl的php学习博客
Original
568 people have browsed it

1. 接口

  1. <?php
  2. // 接口: 接口中有两个成员[接口常量, 公共抽象方法]. 接口定义的方法必须在子类(实现类)中全部实现
  3. interface iTestDemo
  4. {
  5. // 接口常量
  6. const INTERFACR_NAME = 'iTestDemo';
  7. // 构造函数
  8. public function __construct(...$ages);
  9. //公共抽象方法1
  10. public function funcName(): string;
  11. //公共抽象方法2
  12. public static function metName(): string;
  13. }
  14. class TestDemo implements iTestDemo
  15. {
  16. public function funcName(): string
  17. {
  18. return __FUNCTION__;
  19. }
  20. public static function metName(): string
  21. {
  22. return __METHOD__;
  23. }
  24. public function __construct(...$ages) { }
  25. }
  26. // 调用方法
  27. echo (new TestDemo())->funcName(), '<br>';
  28. // 调用静态方法
  29. echo TestDemo::metName(), '<br>';
  30. // 调用接口常量1
  31. echo TestDemo::INTERFACR_NAME, '<br>';
  32. // 调用接口常量2 -- 推荐方式,用接口调用
  33. echo iTestDemo::INTERFACR_NAME, '<br>';

2. 抽象类

  1. // 抽象类: 由abstract关键字修饰, 抽象类中的抽象方法必须在子类(实现类)中全部实现. 不可实例化. 只要是类中存在抽象方法,这个类就是抽象类
  2. abstract class aTestDemo
  3. {
  4. // 构造函数
  5. public function __construct(...$ages)
  6. {
  7. }
  8. //公共抽象方法1
  9. public function funcName(): string
  10. {
  11. return __CLASS__ . '=====>' . __FUNCTION__;
  12. }
  13. //公共抽象方法2
  14. abstract public static function metName(): string;
  15. // {
  16. // return __CLASS__ . '=====>' . __FUNCTION__;
  17. // }
  18. }
  19. class TestDemo2 extends aTestDemo
  20. {
  21. public static function metName(): string
  22. {
  23. return __CLASS__ . '=====>' . __FUNCTION__;
  24. }
  25. }
  26. // 调用方法
  27. echo (new TestDemo2())->funcName(), '<br>';
  28. // 调用抽象方法
  29. echo TestDemo2::metName(), '<br>';

3. 区别

类别 是否可以定义变量 是否可以定义常量 是否可以实例化 是否可以使用构造函数 是否可以定义实例方法 是否可以继承 实现类是否必须要全部实现父级的方法 是否只能使用public修饰符
抽象类 true true false true true true false false
接口 false false false true false true true true

另外, 接口可以实现多继承, 而抽象类只能继承一个.

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:
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