php 接口实现
PHP 接口实现方法
PHP 接口(Interface)是一种定义规范的方式,确保实现该接口的类必须包含接口中定义的所有方法。接口通过 interface 关键字定义,通过 implements 关键字实现。
定义接口
接口定义了一组方法的签名,但不包含具体实现。所有方法必须是公开的(public)。
interface MyInterface {
public function method1();
public function method2($param);
}
实现接口
类通过 implements 关键字实现接口,必须实现接口中定义的所有方法。
class MyClass implements MyInterface {
public function method1() {
echo "Method 1 implementation";
}
public function method2($param) {
echo "Method 2 implementation with param: " . $param;
}
}
多接口实现
一个类可以同时实现多个接口,用逗号分隔。
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";
}
}
接口继承
接口可以通过 extends 关键字继承其他接口。
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 CONSTANT = 'value';
}
class MyClass implements MyInterface {
public function showConstant() {
echo self::CONSTANT;
}
}
$obj = new MyClass();
$obj->showConstant(); // 输出: value
类型提示与接口
可以在函数参数中使用接口作为类型提示,确保传入的对象实现了特定接口。
function process(MyInterface $obj) {
$obj->method1();
}
$obj = new MyClass();
process($obj);
抽象类与接口的区别
抽象类可以包含具体方法和抽象方法,而接口只能包含方法签名。一个类可以实现多个接口,但只能继承一个抽象类。
abstract class MyAbstractClass {
abstract public function abstractMethod();
public function concreteMethod() {
echo "Concrete method";
}
}
class MyClass extends MyAbstractClass implements MyInterface {
public function abstractMethod() {
echo "Abstract method implementation";
}
public function method1() {
echo "Interface method 1";
}
public function method2($param) {
echo "Interface method 2";
}
}
实际应用示例
接口常用于定义服务契约,例如数据库操作接口。
interface DatabaseInterface {
public function connect();
public function query($sql);
public function disconnect();
}
class MySQLDatabase implements DatabaseInterface {
public function connect() {
echo "MySQL connected";
}
public function query($sql) {
echo "Executing MySQL query: " . $sql;
}
public function disconnect() {
echo "MySQL disconnected";
}
}
class PostgreSQLDatabase implements DatabaseInterface {
public function connect() {
echo "PostgreSQL connected";
}
public function query($sql) {
echo "Executing PostgreSQL query: " . $sql;
}
public function disconnect() {
echo "PostgreSQL disconnected";
}
}






