php 实现接口
PHP 实现接口的方法
在 PHP 中,接口(Interface)用于定义一组方法的规范,而不包含具体的实现。类可以实现(implement)接口,并必须实现接口中定义的所有方法。
定义接口
接口通过 interface 关键字定义,可以包含方法的声明,但不能包含方法的具体实现或属性。

interface MyInterface {
public function method1();
public function method2($param);
}
实现接口
类通过 implements 关键字实现接口。一个类可以实现多个接口,必须实现接口中声明的所有方法。
class MyClass implements MyInterface {
public function method1() {
// 实现 method1 的具体逻辑
echo "Method1 implemented";
}
public function method2($param) {
// 实现 method2 的具体逻辑
echo "Method2 implemented with param: " . $param;
}
}
使用接口
接口可以用于类型提示(Type Hinting),确保传入的对象实现了特定的接口。

function useInterface(MyInterface $obj) {
$obj->method1();
$obj->method2("test");
}
$myObj = new MyClass();
useInterface($myObj);
接口继承
接口可以继承其他接口,扩展方法定义。
interface ParentInterface {
public function parentMethod();
}
interface ChildInterface extends ParentInterface {
public function childMethod();
}
class MyChildClass implements ChildInterface {
public function parentMethod() {
echo "Parent method";
}
public function childMethod() {
echo "Child method";
}
}
接口与抽象类的区别
- 接口不能包含属性或方法的实现,而抽象类可以包含部分实现。
- 类可以实现多个接口,但只能继承一个抽象类。
- 接口用于定义行为规范,抽象类用于部分共享实现。
实际应用示例
接口常用于设计模式,如策略模式、工厂模式等。例如,定义一个日志接口,不同的日志类实现该接口。
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 logMessage(Logger $logger, $message) {
$logger->log($message);
}
$fileLogger = new FileLogger();
logMessage($fileLogger, "Log to file");
$dbLogger = new DatabaseLogger();
logMessage($dbLogger, "Log to database");
通过接口,可以灵活切换不同的日志实现,而不需要修改调用代码。






