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

PHP基础: 接口与抽象类

zl的php学习博客
zl的php学习博客原创
2021年02月20日 16:59:38567浏览

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

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

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