php实现接口
PHP 实现接口的基本方法
PHP 中可以通过抽象类和接口两种方式实现接口功能。接口(interface)是一种特殊的抽象类,只包含方法的声明而不包含实现。类可以实现(implements)多个接口,但只能继承一个类。
定义接口的语法:
interface InterfaceName {
public function method1();
public function method2($param);
}
实现接口的类:
class ClassName implements InterfaceName {
public function method1() {
// 具体实现
}
public function method2($param) {
// 具体实现
}
}
接口的多重实现
PHP 支持一个类实现多个接口,用逗号分隔:
class ClassName implements Interface1, Interface2 {
// 必须实现所有接口的方法
}
接口的继承
接口可以继承其他接口:
interface Interface1 {
public function method1();
}
interface Interface2 extends Interface1 {
public function method2();
}
// 实现Interface2必须同时实现method1和method2
接口与类型提示
接口常用于类型提示,确保传入的对象实现特定方法:
function process(InterfaceName $obj) {
$obj->method1();
}
接口常量
接口可以包含常量:
interface InterfaceName {
const CONSTANT = 'value';
}
实现类可以通过接口名或self访问常量:
echo InterfaceName::CONSTANT;
echo self::CONSTANT;
实际应用示例
用户认证接口示例:
interface Authenticatable {
public function login($credentials);
public function logout();
}
class UserAuthenticator implements Authenticatable {
public function login($credentials) {
// 登录逻辑
}
public function logout() {
// 登出逻辑
}
}
接口与抽象类的区别
- 接口只能包含方法声明和常量,不能包含属性
- 类可以实现多个接口,但只能继承一个抽象类
- 接口所有方法必须是public,抽象类可以有各种可见性
- 接口不能包含构造函数
现代PHP中的接口用法
PHP 8.0+ 引入了接口的改进:
- 支持构造函数属性提升
- 支持联合类型
- 新增Stringable等内置接口
例如Stringable接口:

class MyClass implements Stringable {
public function __toString(): string {
return 'string representation';
}
}






