ホームページ >バックエンド開発 >PHPチュートリアル >PHP デザイン パターン: アダプター
アダプター設計パターンは、互換性のないインターフェイスを持つオブジェクトが連携できるようにする構造パターンです。これは 2 つのオブジェクト間の仲介者 (またはアダプター) として機能し、一方のオブジェクトのインターフェイスを、もう一方のオブジェクトが期待するインターフェイスに変換します。これにより、インターフェースが異なるために互換性がなくなるクラスが、元のコードを変更せずに連携できるようになります。
アダプターの構造
アダプター パターンは通常、次の 3 つの主要な要素で構成されます。
アダプターの種類
アダプターはどのような場合に使用しますか?
このパターンは、外部ライブラリまたは API と連携する必要があるシステムで役立ち、これらのライブラリのコードを変更せずに機能を適応させることができます。
ここでは、アダプター設計パターンを使用して PHPMailer をカスタム インターフェイスと統合する方法の例を示します。
状況:
システムは、電子メール送信クラスが IMailer と呼ばれるインターフェイスを実装することを期待していますが、PHPMailer はこのインターフェイスに直接従わないと仮定します。アダプターは、システムが期待するインターフェースに PHPMailer を適合させるために使用されます。
Composer 経由で PHPMailer をインストールします
composer require phpmailer/phpmailer
ディレクトリ システム
?Adapter ┣ ?src ┃ ┣ ?Interfaces ┃ ┃ ┗ ?IMailer.php ┃ ┣ ?Adapters ┃ ┃ ┗ ?PHPMailerAdapter.php ┃ ┗ ?Services ┃ ┗ ?ServicoDeEmail.php ┣ ?vendor ┣ ?composer.json ┗ ?index.php
オートロード
composer.json ファイル (プロジェクトのルートにあります) に、クラスを自動的にロードするための App 名前空間を追加します。
{ "autoload": { "psr-4": { "App\": "src/" } }, "require": { "phpmailer/phpmailer": "^6.5" } }
インターフェイス IMailer
namespace App\Interfaces; interface IMailer { public function send($to, $subject, $message); }
クラス PHPMailerAdapter
namespace App\Adapters; use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; use App\Interfaces\IMailer; class PHPMailerAdapter implements IMailer { private $phpMailer; public function __construct() { $this->phpMailer = new PHPMailer(true); // Basic PHPMailer configuration $this->phpMailer->isSMTP(); $this->phpMailer->Host = 'smtp.example.com'; $this->phpMailer->SMTPAuth = true; $this->phpMailer->Username = 'your-email@example.com'; $this->phpMailer->Password = 'password'; $this->phpMailer->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; $this->phpMailer->Port = 587; $this->phpMailer->setFrom('your-email@example.com', 'Your Name'); } }
public function send($to, $subject, $message) { try { $this->phpMailer->addAddress($to); $this->phpMailer->Subject = $subject; $this->phpMailer->Body = $message; $this->phpMailer->send(); echo 'Email sent successfully!'; } catch (Exception $e) { echo "Failed to send email: {$this->phpMailer->ErrorInfo}"; } }
クラス EmailService
namespace App\Services; use App\Interfaces\IMailer; class EmailService { private $mailer; public function __construct(IMailer $mailer) { $this->mailer = $mailer; } }
public function sendEmailToClient($to, $subject, $message) { $this->mailer->send($to, $subject, $message); }
ファイルindex.php
composer require phpmailer/phpmailer
構造の説明
以上がPHP デザイン パターン: アダプターの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。