Corak Reka Bentuk PHP: Penyesuai

Susan Sarandon
Lepaskan: 2024-10-27 08:59:30
asal
406 orang telah melayarinya

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
Salin selepas log masuk
Salin selepas log masuk

Sistem Direktori

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

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"
    }
}
Salin selepas log masuk

Imailer Antara Muka

namespace App\Interfaces;

interface IMailer {
    public function send($to, $subject, $message);
}
Salin selepas log masuk

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');
    }
}
Salin selepas log masuk
  • 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}";
    }
}
Salin selepas log masuk

Perkhidmatan E-mel Kelas

namespace App\Services;

use App\Interfaces\IMailer;

class EmailService {
    private $mailer;

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

Indeks fail.php

composer require phpmailer/phpmailer
Salin selepas log masuk
Salin selepas log masuk

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!

sumber:dev.to
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!