php一个接口不同实现
PHP 接口的不同实现方式
在 PHP 中,接口(Interface)用于定义一组方法的规范,而具体的实现由不同的类完成。以下是几种常见的接口实现方式:
单一接口实现
定义一个接口,并由一个类实现该接口的所有方法。
interface LoggerInterface {
public function log($message);
}
class FileLogger implements LoggerInterface {
public function log($message) {
file_put_contents('log.txt', $message, FILE_APPEND);
}
}
多接口实现
一个类可以实现多个接口,满足不同接口的规范。
interface LoggerInterface {
public function log($message);
}
interface NotifierInterface {
public function notify($message);
}
class MultiLogger implements LoggerInterface, NotifierInterface {
public function log($message) {
file_put_contents('log.txt', $message, FILE_APPEND);
}
public function notify($message) {
mail('admin@example.com', 'Notification', $message);
}
}
抽象类实现接口
抽象类可以部分实现接口的方法,剩余方法由子类实现。
interface LoggerInterface {
public function log($message);
public function setLogLevel($level);
}
abstract class AbstractLogger implements LoggerInterface {
protected $logLevel;
public function setLogLevel($level) {
$this->logLevel = $level;
}
abstract public function log($message);
}
class ConsoleLogger extends AbstractLogger {
public function log($message) {
echo "[{$this->logLevel}] {$message}\n";
}
}
动态接口实现
通过匿名类动态实现接口,适用于临时场景。
interface LoggerInterface {
public function log($message);
}
$logger = new class implements LoggerInterface {
public function log($message) {
echo $message;
}
};
$logger->log('Dynamic implementation');
接口继承
接口可以继承其他接口,扩展更多方法规范。
interface LoggerInterface {
public function log($message);
}
interface AdvancedLoggerInterface extends LoggerInterface {
public function logWithTimestamp($message);
}
class AdvancedLogger implements AdvancedLoggerInterface {
public function log($message) {
echo $message;
}
public function logWithTimestamp($message) {
echo '[' . date('Y-m-d H:i:s') . '] ' . $message;
}
}
依赖注入实现
通过依赖注入,灵活切换不同接口实现。
interface PaymentGateway {
public function process($amount);
}
class PayPalGateway implements PaymentGateway {
public function process($amount) {
echo "Processing PayPal payment: {$amount}";
}
}
class StripeGateway implements PaymentGateway {
public function process($amount) {
echo "Processing Stripe payment: {$amount}";
}
}
class PaymentService {
private $gateway;
public function __construct(PaymentGateway $gateway) {
$this->gateway = $gateway;
}
public function pay($amount) {
$this->gateway->process($amount);
}
}
// 使用
$paypal = new PayPalGateway();
$service = new PaymentService($paypal);
$service->pay(100);
接口作为类型约束
在函数参数或返回值中使用接口作为类型约束。
interface CacheInterface {
public function get($key);
public function set($key, $value);
}
function cacheData(CacheInterface $cache, $key, $value) {
$cache->set($key, $value);
}
class RedisCache implements CacheInterface {
public function get($key) {
// Redis get logic
}
public function set($key, $value) {
// Redis set logic
}
}
$redis = new RedisCache();
cacheData($redis, 'user_1', 'John Doe');
通过以上方式,PHP 中的接口可以实现灵活多样的设计模式,提高代码的可扩展性和可维护性。







