php 接口 实现
PHP 接口实现基础
在 PHP 中,接口(Interface)用于定义一组方法的规范,而不实现具体功能。类通过实现接口来遵循这些规范。接口通过 interface 关键字定义,类通过 implements 关键字实现接口。
interface MyInterface {
public function method1();
public function method2($param);
}
实现单个接口
类实现接口时,必须定义接口中声明的所有方法,否则会报错。
class MyClass implements MyInterface {
public function method1() {
echo "Method 1 implemented";
}
public function method2($param) {
echo "Method 2 with param: " . $param;
}
}
实现多个接口
PHP 支持一个类实现多个接口,用逗号分隔接口名。
interface InterfaceA {
public function methodA();
}
interface InterfaceB {
public function methodB();
}
class MyClass implements InterfaceA, InterfaceB {
public function methodA() {
echo "Method A";
}
public function methodB() {
echo "Method B";
}
}
接口继承
接口可以继承其他接口,扩展方法规范。
interface ParentInterface {
public function parentMethod();
}
interface ChildInterface extends ParentInterface {
public function childMethod();
}
class MyClass implements ChildInterface {
public function parentMethod() {
echo "Parent method";
}
public function childMethod() {
echo "Child method";
}
}
常量定义
接口中可以定义常量,实现类不能修改这些常量。
interface MyInterface {
const MY_CONSTANT = 'value';
}
echo MyInterface::MY_CONSTANT; // 输出 'value'
实际应用示例
接口常用于定义服务契约,例如日志记录器。
interface Logger {
public function log($message);
}
class FileLogger implements Logger {
public function log($message) {
file_put_contents('log.txt', $message, FILE_APPEND);
}
}
class DatabaseLogger implements Logger {
public function log($message) {
// 数据库记录逻辑
}
}
function process(Logger $logger) {
$logger->log("Processing started");
}
$fileLogger = new FileLogger();
process($fileLogger);
类型提示
可以使用接口类型提示,确保参数对象实现特定接口。
function doSomething(MyInterface $obj) {
$obj->method1();
$obj->method2('test');
}
与抽象类比较
接口只包含方法声明和常量,而抽象类可以包含具体实现。一个类可以实现多个接口,但只能继承一个抽象类。
最佳实践
- 使用接口定义行为契约
- 保持接口精简,遵循单一职责原则
- 为接口命名时通常使用形容词或名词加"able"后缀(如
Countable,Serializable)







