php抽象类和接口的选用场景,PHP接口和抽象类|接口与抽象类的区别与联系

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

一、抽象

1.1抽象方法没有方法体: 一个方法不使用 “{}”,直接使用分号结束的方法。

如果是抽象方法,必须使用 abstract 来修饰

1.2 抽象类如果一个类中有一个方法是抽象方法,则这个类是抽象类。 如果声明一个抽象类,必须使用 abstract 来修饰

只要使用 abstract 修饰的类就是抽象类。不一定有抽象方法

抽象类是一种特殊的类,在抽象类中可以有抽象方法。

除了在抽象类中可以有抽象方法,其他和正常的类完全一样。

抽象类不能实例化对象

如果看见抽象类就必须写这个类的子类。将抽象类的抽象方法覆盖(加上方法体)

子类必须全部实现抽象类的抽象方法。如果只实现部分,那么子类也必须是抽象类。

1.3抽象方法的作用

**抽象方法的作用就是规定子类必须有这个方法的实现,功能交给子类。 只写出结构,而没有实现,实现交给子类按照自己的功能去实现。

规范所有子类的写法**

abstractclassUser

{

public$name;

public$age;

abstractfunctionsay();

publicfunctionwalk(){}

functionsleep(){

echo"nizaitaxianghuanhaoma!";

}

}

// 抽象类必须通过它的子类才可以使用

classUser1extendsUser

{

// 抽象类的实现类(子类)必须将抽象类的抽象方法实现

functionsay(){

echo"志强中国人
";

}

}

classUser2extendsUser

{

// 抽象类的实现类(子类)必须将抽象类的抽象方法实现

functionsay(){

echo"Welcome to Beijing
";

}

}

$a1=newUser1();

$a2=newUser2();

$a1->say();

$a2->say();

图示:

2ed3c479bf4a60a357133364339f4811.png

二、接口抽象类是一种抽象的类,接口是一种特殊的抽象类。

抽象类和接口中都有抽象方法

抽象类和接口都不能实例化对象

抽象类和接口使用作用一样,都是规范

接口中的方法,必须全部是抽象方法。所以在接口中,可以省略 abstract

接口中的成员属性,必须是常量(不能有变量)。

所有的权限必须是公有的(public)

声明接口使用 interface

可以使用extends继承自另一个接口。(接口和接口只有扩展新抽象方法,没有覆盖的关系)

可以使用一个类来实现接口中的全部方法,也可以使用一个抽象类,来实现接口中的部分方法

(类与接口,抽象类与接口 =》有实现接口中的抽象方法)

类(抽象类)实现接口使用关键字 implements

实现多个接口只需要使用逗号分开即可。

课堂案例:<?php

// 接口的语法

// 声明

interfaceiUser

{

// 接口中只允许声明二类成员: 类常量, 公共抽象方法

// 接口常量

constAPP_NAME='京东商城';

// 公共抽象方法,没有实现过程

publicstaticfunctiona1(...$args):string;

// 构造方法

publicfunction__constract(...$args);

}

// 使用: 必须创建一个实现类

// 实现类

classUser1implementsiUser

{

// const a = 1;

// 在实现类中必须将接口中声明的抽象方法全部实现了

publicstaticfunctiona1(...$args):string

{

returnprint_r($args,true);

}

// 构造方法

publicfunction__constract(...$args)

{

returnnewstatic;

}

}

$obj=newUser1();

echoUser1::APP_NAME,'
';

// 尽可能直接用接口来访问类常量

echo iUser::APP_NAME,'
';

// 实例可以调用 静态方法,但是不能调用静态属性

echo $obj->a1(' 商品','价格','型号','产地','优惠价'),'
';

// 尽可能用类来调用静态方法

echoUser1::a1(' 商品','价格','型号','产地','优惠价'),'
';

图示:

31073d294b22a4424a7da41b0b7439de.png

三、抽象类和接口的区别

1、对接口的使用是通过关键字implements。对抽象类的使用是通过关键字extends。当然接口也可以通过关键字extends继承。

2、接口中不可以声明成员变量(包括类静态变量),但是可以声明类常量。抽象类中可以声明各种类型成员变量,实现数据的封装。(另JAVA接口中的成员变量都要声明为public static final类型)

3、接口没有构造函数,抽象类可以有构造函数。

4、接口中的方法默认都是public类型的,而抽象类中的方法可以使用private,protected,public来修饰。

5、一个类可以同时实现多个接口,但一个类只能继承于一个抽象类。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值