php中abstract与interface的区别

本文对比分析了PHP中抽象类与接口的区别与联系,并详细解释了各自的使用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 在php中,abstract与interface类似,都是对抽象属性以及方法的处理,但是什么时候该使用abstract修饰,

什么时候又该使用interface修饰,让我们来学习一下

 首先,来了解abstract相关属性:

  所谓抽象类,那便是在类的方法中只要有一个使用了abstract修饰的方法,那此方法便是抽象方法,此

 类便属于一个抽象类(其中,抽象方法只能时:public、protected),那么此时,需要我们也必须在类的

 前面使用abstract进行修饰,其中可以含有类属性。

  当一个类属与一个抽象类时,那么此时,当前类便不能直接被实例化,只能被继承

 

 如上图,便是属于一个抽象类,fun2为抽象方法,其中作为子类的B必须要在类中实现抽象类中的抽象方

法,不然会报错,而由于抽象类A中的fun1为一个普通的方法,故而可以不用在B中实现。

 interface类:

 interface与abstract类类似,只是interface中全部为抽象方法与属性,必须在子类中进行实现。接

 口只能使用implements实现,不能被继承,一个类可以实现多个接口,多个以逗号分隔,如下图:

 

上图中C为一个接口类,D实现接口C,在C中的方法,D中必须实现,其中接口C中的方法只能使用public

修饰,同时,接口C中不能含有类属性,如图,会直接报错。

 

abstract与interface的异同:

 相同点:

 (1)两者都是抽象类,都不能实例化。

 (2)interface 实现类及 abstract class 的子类都必须要实现已经声明的抽象方法。


 不同点:

  (1) interface interface 只能使 implements实现 ,而 abstract  需要使用 extends 。

  (2)interface一个类可以实现多  interface ,但一个类只能继承一个 abstract 类 

  (3)  interface 主要强调功能的实现,而 abstract class 强调类与类之间的所属关系。

  (4)接口中的抽象方法默认是 public 的,也只能是 public 的,不能用 private  

 protected 修饰符修饰。而抽象类中的抽象方法则可以用 public  protected 来修饰,但不能用 private 

 使用场景:

 interface:

 (1)类与类之间需要特定的接口来进行关联,不在乎如何实现接口内的功能

 (2)指定项目中一套统一的格式

abstract:

(1)定义了一组接口,但是接口所在的类中还有其他非接口的功能实现

(2)类与类中的协调还需要不同的变量来区别不同的关系

(3)父类与子类中各自存在不同的功能




 

  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值