PHP代理模式可以通過創建一個代理類來實現。代理類通常具有與被代理類相同的接口,并且在執行相應方法時會調用被代理類的方法。
下面是一個簡單的例子,演示如何使用代理模式來實現日志記錄:
首先,我們創建一個接口 Logger
,定義日志記錄的方法:
interface Logger
{
public function log($message);
}
然后,創建一個實現了 Logger
接口的被代理類 FileLogger
,用于記錄日志到文件中:
class FileLogger implements Logger
{
public function log($message)
{
// 將日志寫入文件
file_put_contents('log.txt', $message . "\n", FILE_APPEND);
}
}
接下來,創建一個代理類 ProxyLogger
,在調用 log()
方法時,會在日志中添加額外的信息,并調用被代理類的 log()
方法:
class ProxyLogger implements Logger
{
private $fileLogger;
public function __construct()
{
$this->fileLogger = new FileLogger();
}
public function log($message)
{
$message = date('Y-m-d H:i:s') . ': ' . $message;
$this->fileLogger->log($message);
}
}
最后,通過創建代理類的實例來使用代理模式:
$logger = new ProxyLogger();
$logger->log('This is a log message');
這樣,當調用代理類的 log()
方法時,會在日志中添加時間信息,并將日志寫入文件中。