在PHP中,抽象类和接口都用于定义一种规范,但它们之间有明显的区别:
接口(Interface):
- 只能定义公共的方法,这些方法不能包含任何实现。
- 一个类可以实现一个或多个接口。通过使用
implements
关键字并列多个接口来实现。 - 接口定义了一种contract(契约),实现了接口的类必须实现接口中的所有方法。
- 接口不能包含属性,除了const定义的常量。
phpinterface MyInterface {
public function method1();
public function method2();
}
class MyClass implements MyInterface {
public function method1() {
// 实现
}
public function method2() {
// 实现
}
}
抽象类(Abstract Class):
- 可以定义抽象方法,这些方法不能包含实现,需要在子类中实现。
- 可以定义具体方法,这些方法可以包含实现。
- 抽象类不能被实例化,只能被继承。
- 抽象类是一个不能被直接实例化的类,它的目的是为了提供一个可以被子类继承的公共接口。
phpabstract class MyAbstractClass {
public function concreteMethod() {
// 实现
}
abstract public function abstractMethod();
}
class MyConcreteClass extends MyAbstractClass {
public function abstractMethod() {
// 实现
}
}
区别概括:
- 接口定义了一套规则,必须被实现。
- 抽象类定义了一套规则,可以部分被实现(抽象方法子类来实现),还可以包含自己的实现。