Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Corak Reka Bentuk PHP: Penyesuai

Corak Reka Bentuk PHP: Penyesuai

Susan Sarandon
Susan Sarandonasal
2024-10-27 08:59:30407semak imbas

Corak Reka Bentuk Penyesuai ialah corak struktur yang membenarkan objek dengan antara muka yang tidak serasi berfungsi bersama. Ia bertindak sebagai perantara (atau penyesuai) antara dua objek, menukar antara muka satu objek kepada antara muka yang diharapkan oleh yang lain. Ini membenarkan kelas yang sebaliknya tidak serasi kerana mereka mempunyai antara muka yang berbeza untuk bekerjasama tanpa pengubahsuaian pada kod asalnya.

Struktur Penyesuai

Corak Penyesuai secara amnya terdiri daripada tiga elemen utama:

  • Pelanggan: Kelas yang menjangkakan berfungsi dengan objek antara muka tertentu.
  • Adaptee: Kelas yang mempunyai antara muka yang tidak serasi dengan klien, tetapi fungsinya diperlukan.
  • Penyesuai: Kelas yang melaksanakan antara muka yang diharapkan oleh pelanggan dan menukar panggilan kepada antara muka Adaptee.

PHP Design Pattern: Adapter

Jenis Penyesuai

  1. Penyesuai Objek: Berasaskan komposisi. Penyesuai mengandungi contoh kelas yang sedang disesuaikan.
  2. Penyesuai Kelas: Berasaskan warisan (biasanya dalam bahasa yang menyokong berbilang warisan).

Bila hendak menggunakan Penyesuai?

  • Apabila anda ingin menggunakan kelas sedia ada, tetapi antara mukanya tidak sepadan dengan apa yang pelanggan jangkakan.
  • Untuk menyepadukan fungsi baharu ke dalam sistem warisan, tanpa perlu mengubah suai kod lama.

Corak ini berguna dalam sistem yang perlu berfungsi dengan perpustakaan luaran atau API, membolehkan anda menyesuaikan fungsinya tanpa mengubah kod perpustakaan ini.

Contoh Menggunakan PHPMailer

Berikut ialah contoh cara menggunakan Corak Reka Bentuk Penyesuai untuk menyepadukan PHPMailer dengan antara muka tersuai.

Situasi:

Mari andaikan bahawa sistem anda menjangkakan mana-mana kelas penghantaran e-mel untuk melaksanakan antara muka yang dipanggil IMailer, tetapi PHPMailer tidak mengikuti antara muka ini secara langsung. Penyesuai akan digunakan untuk menyesuaikan PHPMailer kepada antara muka yang diharapkan oleh sistem.

Pasang PHPMailer melalui Komposer

composer require phpmailer/phpmailer

Sistem Direktori

?Adapter
 ┣ ?src
 ┃ ┣ ?Interfaces
 ┃ ┃ ┗ ?IMailer.php
 ┃ ┣ ?Adapters
 ┃ ┃ ┗ ?PHPMailerAdapter.php
 ┃ ┗ ?Services
 ┃   ┗ ?ServicoDeEmail.php
 ┣ ?vendor
 ┣ ?composer.json
 ┗ ?index.php

Automuat

Dalam fail composer.json (terletak di akar projek), tambahkan ruang nama Apl untuk memuatkan kelas secara automatik:

{
    "autoload": {
        "psr-4": {
            "App\": "src/"
        }
    },
    "require": {
        "phpmailer/phpmailer": "^6.5"
    }
}

Imailer Antara Muka

namespace App\Interfaces;

interface IMailer {
    public function send($to, $subject, $message);
}

Kelas 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');
    }
}
  • Kaedah hantar
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}";
    }
}

Perkhidmatan E-mel Kelas

namespace App\Services;

use App\Interfaces\IMailer;

class EmailService {
    private $mailer;

    public function __construct(IMailer $mailer) {
        $this->mailer = $mailer;
    }
}
  • Kaedah hantarEmelKepadaPelanggan
public function sendEmailToClient($to, $subject, $message) {
    $this->mailer->send($to, $subject, $message);
}

Indeks fail.php

composer require phpmailer/phpmailer

Penjelasan Struktur

  • IMailer.php: Mentakrifkan antara muka IMailer yang perlu dilaksanakan oleh mana-mana sistem e-mel.
  • PHPMailerAdapter.php: Menyesuaikan PHPMailer kepada antara muka IMailer.
  • EmailService.php: Perkhidmatan e-mel yang menggunakan antara muka IMailer untuk menghantar e-mel.
  • index.php: Fail utama yang menggunakan perkhidmatan e-mel untuk menghantar mesej.

Atas ialah kandungan terperinci Corak Reka Bentuk PHP: Penyesuai. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn