1. 什么是interface
在PHP中,interface是一种特殊的类,定义了一个类必须实现的方法,但是不需要实现这些方法。简单来说,interface就是约定某个行为的规范,具体行为的实现在类中实现。
interface Car {
public function getBrand();
public function getColor();
}
上述代码定义了一个名为Car的interface,里面包含了getBrand和getColor这两个方法。
注意:interface中不能有属性,这是与类的区别。
2. interface与类的关系
2.1 interface的实现
一个类通过实现一个或多个interface来实现这些interface中规定的方法,实现interface时使用implement关键字。例如:
class BMW implements Car {
// 实现getBrand方法
public function getBrand() {
return 'BMW';
}
// 实现getColor方法
public function getColor() {
return 'Black';
}
}
上述代码中,BMW类实现了Car interface,并且实现了该interface中规定的getBrand和getColor方法。
2.2 类继承与接口实现
类可以实现一个或多个interface,同时继承其他类。在这种情况下,先继承类,再实现interface。例如:
class BMWCar extends CarFactory implements Car {
// 实现getBrand方法
public function getBrand() {
return 'BMW';
}
// 实现getColor方法
public function getColor() {
return 'Black';
}
}
上述代码中,BMWCar继承CarFactory类并实现了Car interface。
3. interface的作用
3.1 统一接口规范
通过定义interface,我们可以统一一组类的接口规范,这样可以方便其他开发人员理解和使用我们的代码。
3.2 多态性
通过interface,我们可以实现多态性。比如:
class CarFactory {
public function buildCar(Car $car) {
$brand = $car->getBrand();
$color = $car->getColor();
return new Car($brand, $color);
}
}
上述代码建立了一个CarFactory类,其中buildCar方法接收一个实现了Car接口的类的实例。这里传递的参数可以是BMW、Benz等实现了Car的类的实例。这样,在调用buildCar方法时,我们无需考虑参数是何种类型,只要该类实现了Car接口规定的方法即可。