博客列表 >接口和抽象类

接口和抽象类

手机用户1607314868
手机用户1607314868原创
2021年02月04日 04:49:51609浏览

自己定义一个接口和抽象类,并实现它,对比接口与抽象类的区别与联系,并实例演示

static

static三种用途

  1. 类中静态成员
  2. 函数中的静态变量
  3. 后期静态绑定[延迟静态绑定]
    静态继承上下文
  1. class Test
  2. {
  3. public static function demo1():string
  4. {
  5. return '父类'.__METHOD__;
  6. }
  7. public static function demo2():string
  8. {
  9. //self 永远和父类绑定,不能动态的识别或设置静态成员的调用者
  10. // return self::demo1();
  11. //static 可以识别静态成员的调用者,子类重写了demo1则调用子类的demo1
  12. //使用static代替self 。static用在动态的执行阶段,self用在静态的编译阶段
  13. return static::demo1();
  14. }
  15. }
  16. //子类
  17. class Sub extends Test
  18. {
  19. //只要是父类中的public ,protected 声明的成员,子类都可以使用
  20. //子类中重写父类的静态方法
  21. public static function demo1():string
  22. {
  23. return '子类'.__METHOD__;
  24. }
  25. }
  26. //这就是静态继承上下文
  27. //子类可以调用父类的静态成员
  28. echo Sub::demo2();

接口

interface 声明,接口只允许声明两类成员:类常量,公共抽象方法(没有实现过程)。
接口使用必须创建一个实现类。
实现类必须将接口中声明的抽象方法全部实现。

  1. interface iGood
  2. {
  3. //类常量
  4. const DEMO='举例';
  5. //抽象方法
  6. public function demo1(...$test):string
  7. }
  8. //实现类实现接口
  9. class Good implements iGood
  10. {
  11. public function demo1(...$test):string
  12. {
  13. return print_r($test,true);
  14. }
  15. }
  16. $good=new Good();
  17. echo $good->demo1('你好!');

抽象类

抽象类必须通过它的子类才可以使用,子类必须将抽象类的抽象方法实现,实现类:实现了接口和抽象类的抽象方法的 工作类
abstract 声明抽象类
抽象类不一定有抽象方法,但有抽象方法的一定是抽象类。

  1. abstract class Model
  2. {
  3. //抽象方法
  4. abstract public function __construct();
  5. }
  6. class UserModel extends Model
  7. {
  8. public function __construct(){
  9. }
  10. }

注意:接口不是类。
抽象类可以有属性、普通方法、抽象方法,但接口不能有属性、普通方法、可以有常量.
抽象类内未必有抽象方法,但接口内一定会有“抽象”方法

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