php实现接口
PHP 实现接口的方法
定义接口
接口使用 interface 关键字定义,可以包含方法声明但不包含实现。所有方法默认为公共方法。
interface PaymentGateway {
public function processPayment($amount);
public function refundPayment($transactionId);
}
实现接口
类使用 implements 关键字实现接口,必须提供接口中所有方法的具体实现。

class StripePayment implements PaymentGateway {
public function processPayment($amount) {
// Stripe 支付处理逻辑
return "Processed payment of $amount via Stripe";
}
public function refundPayment($transactionId) {
// Stripe 退款处理逻辑
return "Refunded transaction $transactionId via Stripe";
}
}
多接口实现
一个类可以实现多个接口,用逗号分隔。
interface Logger {
public function log($message);
}
class PayPalPayment implements PaymentGateway, Logger {
public function processPayment($amount) {
// PayPal 支付处理逻辑
return "Processed payment of $amount via PayPal";
}
public function refundPayment($transactionId) {
// PayPal 退款处理逻辑
return "Refunded transaction $transactionId via PayPal";
}
public function log($message) {
// 日志记录逻辑
echo "Log: $message";
}
}
接口继承
接口可以继承其他接口,扩展功能。

interface AdvancedPaymentGateway extends PaymentGateway {
public function authorize($credentials);
}
class SquarePayment implements AdvancedPaymentGateway {
public function processPayment($amount) {
// Square 支付处理逻辑
}
public function refundPayment($transactionId) {
// Square 退款处理逻辑
}
public function authorize($credentials) {
// Square 授权逻辑
}
}
类型提示
接口可用于类型提示,确保参数实现特定接口。
function handlePayment(PaymentGateway $gateway, $amount) {
echo $gateway->processPayment($amount);
}
$stripe = new StripePayment();
handlePayment($stripe, 100.00);
常量定义
接口可以包含常量,实现类不能覆盖这些常量。
interface Shipping {
const DEFAULT_COUNTRY = 'US';
public function calculateShipping($address);
}
class FedExShipping implements Shipping {
public function calculateShipping($address) {
// 使用接口常量
if ($address['country'] === Shipping::DEFAULT_COUNTRY) {
return 5.00;
}
return 15.00;
}
}
实际应用示例
REST API 接口实现
interface ApiEndpoint {
public function handleRequest($requestData);
}
class UserEndpoint implements ApiEndpoint {
public function handleRequest($requestData) {
switch ($_SERVER['REQUEST_METHOD']) {
case 'GET':
return $this->getUser($requestData['id']);
case 'POST':
return $this->createUser($requestData);
default:
throw new Exception('Method not allowed');
}
}
private function getUser($id) {
// 获取用户逻辑
}
private function createUser($data) {
// 创建用户逻辑
}
}
// 使用示例
$endpoint = new UserEndpoint();
try {
$response = $endpoint->handleRequest($_REQUEST);
echo json_encode($response);
} catch (Exception $e) {
http_response_code(400);
echo json_encode(['error' => $e->getMessage()]);
}
数据库访问接口
interface DatabaseAdapter {
public function connect($config);
public function query($sql);
public function close();
}
class MySQLAdapter implements DatabaseAdapter {
private $connection;
public function connect($config) {
$this->connection = new mysqli(
$config['host'],
$config['user'],
$config['password'],
$config['database']
);
}
public function query($sql) {
return $this->connection->query($sql);
}
public function close() {
$this->connection->close();
}
}
注意事项
- 接口方法必须被实现类全部实现,否则会触发致命错误
- 接口不能包含属性,只能包含方法和常量
- 实现接口时方法签名必须完全匹配(参数数量和类型)
- PHP 8.0 开始支持接口中的静态方法
- 接口可以用于实现多继承效果,因为类可以实现多个接口






