ホームページ  >  記事  >  バックエンド開発  >  PHP デザイン パターン: アダプター

PHP デザイン パターン: アダプター

Susan Sarandon
Susan Sarandonオリジナル
2024-10-27 08:59:30407ブラウズ

アダプター設計パターンは、互換性のないインターフェイスを持つオブジェクトが連携できるようにする構造パターンです。これは 2 つのオブジェクト間の仲介者 (またはアダプター) として機能し、一方のオブジェクトのインターフェイスを、もう一方のオブジェクトが期待するインターフェイスに変換します。これにより、インターフェースが異なるために互換性がなくなるクラスが、元のコードを変更せずに連携できるようになります。

アダプターの構造

アダプター パターンは通常、次の 3 つの主要な要素で構成されます。

  • クライアント: 特定のインターフェイスのオブジェクトを操作することを期待するクラス。
  • Adapte: クライアントと互換性のないインターフェイスを持つクラスですが、その機能は必要です。
  • アダプター: クライアントが予期するインターフェースを実装し、呼び出しを Adaptee インターフェースに変換するクラス。

PHP Design Pattern: Adapter

アダプターの種類

  1. オブジェクト アダプター: 構成ベース。アダプターには、適応しているクラスのインスタンスが含まれています。
  2. クラスアダプター: 継承ベース (通常は多重継承をサポートする言語)。

アダプターはどのような場合に使用しますか?

  • 既存のクラスを使用したいが、そのインターフェイスがクライアントが期待するものと一致しない場合。
  • 古いコードを変更せずに、新しい機能をレガシー システムに統合するため。

このパターンは、外部ライブラリまたは API と連携する必要があるシステムで役立ち、これらのライブラリのコードを変更せずに機能を適応させることができます。

PHPMailer の使用例

ここでは、アダプター設計パターンを使用して 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;
    }
}
  • メソッド sendEmailToClient
public function sendEmailToClient($to, $subject, $message) {
    $this->mailer->send($to, $subject, $message);
}

ファイルindex.php

composer require phpmailer/phpmailer

構造の説明

  • IMailer.php: 電子メール システムが実装する必要がある IMailer インターフェイスを定義します。
  • PHPMailerAdapter.php: PHPMailer を IMailer インターフェイスに適応させます。
  • EmailService.php: IMailer インターフェイスを使用して電子メールを送信する電子メール サービス。
  • Index.php: 電子メール サービスを使用してメッセージを送信するメイン ファイル。

以上がPHP デザイン パターン: アダプターの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。