PHP 中抽象类和接口的区别

2025 年 4 月 29 日 | 4 分钟阅读

抽象类中可以同时包含抽象方法和非抽象方法,而接口只能包含抽象方法。接口被实现,抽象类被扩展。本主题将讨论 PHP 中抽象类和接口的许多区别。

什么是抽象类?

程序的方法和数据成员存储在抽象类中,抽象类充当模板。当您期望它会被几个具有共享字段和函数的子类继承时,您应该使用抽象类。

抽象方法,即没有方法体的方法,可能存在于抽象类中,也可能不存在。但是,如果一个类至少包含一个抽象方法,则必须将其指定为抽象类。

尽管抽象类可以被继承,但它们不能被实例化。您必须实现抽象类中的抽象方法并从另一个类继承它才能使用它。要创建抽象类或抽象方法,您必须使用 abstract 关键字。

语法

抽象类示例

示例

输出

Strumming strings! I'm a Guitar.
Melodic keys! I'm a Piano.
Loud and rhythmic! I'm a Drums.

抽象类的特点

PHP 中的抽象类包含以下几个关键特性:

  • 它可以包含抽象方法和非抽象方法。
  • 您可以在抽象类中包含属性。
  • 它可以有构造函数
  • 您不能直接创建抽象类。
  • 抽象类支持公共、私有、受保护等访问修饰符。
  • 它可以使用 extends 关键字继承。

什么是接口?

PHP 中,接口可以用作类的模板,就像类是其对象的模板一样。它与类相似,只是它不包含非抽象方法和实际代码。它用于定义方法名称及其参数,而不提供实现。接口中声明的每个方法都必须由实现它的类提供具体的定义。

PHP 允许一个类实现多个接口,使接口成为实现多重继承和强制不同类之间一致方法结构的强大工具。接口经常用于指定实现类必须遵循的契约。它们使用 interface 关键字定义。除了将关键字“class”替换为“interface”之外,接口的定义方式与类相同。

语法

接口示例

示例

输出

Base: 5, Height: 10 | Area of Triangle: 25
Length: 4, Width: 6 | Area of Rectangle: 24

接口的特点

作为抽象类,PHP 接口也具有以下一些关键特性:

  • 它只包含方法声明。
  • 它没有属性,但可以轻松定义常量。
  • 在接口中,所有方法都是公共的。
  • 在 PHP 中,接口允许使用逗号实现多个接口。
  • 它可以使用 interface 关键字定义。
  • 您可以使用 implements 关键字实现接口。

抽象类和接口的区别

特性抽象类Interface
抽象类型部分抽象完全抽象
方法类型可以同时包含抽象方法和非抽象方法只能包含抽象方法
变量声明变量可以声明变量不能声明
访问说明符支持所有访问修饰符(public、protected、private)只允许公共访问修饰符
继承关键字extendsimplements
多重继承不可能可能(通过实现多个接口)
代码重用性通过非抽象方法实现代码重用不允许代码重用

何时使用抽象类或接口?

在以下情况下使用抽象类

  • 类共享通用功能
  • 您想定义基本方法
  • 您需要受保护/私有成员
  • 您想提供默认行为

在以下情况下使用接口

  • 您需要强制执行通用契约
  • 您需要多重继承
  • 您只需要公共方法声明
  • 您需要解耦、可插拔的组件

下一主题PHP 中的封装