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修饰符
抽象类truetruefalsetruetruetruefalsefalse
接口falsefalsefalsetruefalsetruetruetrue

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

更多相关文章

  1. PHP基础: 类(class)的声明,实例化,静态成员和类的扩展﹑trait的功
  2. 几种Linux系统切换内核启动顺序方法
  3. Java反射机制:跟着代码学反射
  4. linux下挂载NTFS文件系统出现symbol lookup error: 报错解决方
  5. shell单分支if条件句语法详解与生产案例详解
  6. Java 对象的哈希值是每次 hashCode() 方法调用重计算么?
  7. 这样规范写代码,同事直呼“666”
  8. JUC的世界II
  9. Java程序员必备基础:Object的十二个知识点

随机推荐

  1. adb 获取平台号
  2. Android 4.4报错,Android 7.0运行正常 Win
  3. layout_gravity="bottom" 失效
  4. 总结系列-Android的文件系统
  5. Anko:Android 代码动态布局的新方案
  6. Android中Timer与TimerTask的使用 间隔执
  7. Android Studio Error:Could not find co
  8. ANDROID学习之路
  9. Android(安卓)如何退出程序
  10. android textview系统默认的颜色值是多少