"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > نمط تصميم PHP: محول

نمط تصميم PHP: محول

تم النشر بتاريخ 2024-11-06
تصفح:485

نمط تصميم المحول هو نمط هيكلي يسمح للكائنات ذات الواجهات غير المتوافقة بالعمل معًا. وهو يعمل كوسيط (أو محول) بين كائنين، حيث يقوم بتحويل واجهة أحد الكائنات إلى الواجهة المتوقعة من الكائن الآخر. وهذا يسمح للفئات التي قد تكون غير متوافقة لأن لديها واجهات مختلفة بالتعاون دون تعديلات على الكود الأصلي الخاص بها.

هيكل المحول

يتكون نمط المحول بشكل عام من ثلاثة عناصر رئيسية:

    العميل: الفئة التي تتوقع العمل مع كائنات واجهة معينة.
  • Adaptee: الفئة التي لها واجهة غير متوافقة مع العميل، ولكن وظائفها ضرورية.
  • المحول: الفئة التي تنفذ الواجهة المتوقعة من قبل العميل وتحول المكالمات إلى واجهة Adaptee.

PHP Design Pattern: Adapter

أنواع المحولات

  1. محول الكائن: يعتمد على التركيب. يحتوي المحول على مثيل للفئة التي يقوم بتكييفها.
  2. محول الفئة: يعتمد على الوراثة (عادةً في اللغات التي تدعم الوراثة المتعددة).

متى يجب استخدام المحول؟

    عندما تريد استخدام فصل دراسي موجود، ولكن واجهته لا تتطابق مع ما يتوقعه العميل.
  • لدمج وظائف جديدة في نظام قديم، دون الحاجة إلى تعديل الكود القديم.
هذا النمط مفيد في الأنظمة التي تحتاج إلى العمل مع المكتبات الخارجية أو واجهات برمجة التطبيقات، مما يسمح لك بتكييف وظائفها دون تغيير كود هذه المكتبات.

مثال باستخدام PHPMailer

فيما يلي مثال لكيفية استخدام نمط تصميم المحول لدمج PHPMailer مع واجهة مخصصة.

الموقف:

لنفترض أن نظامك يتوقع أن تقوم أي فئة إرسال بريد إلكتروني بتنفيذ واجهة تسمى IMailer، لكن

PHPMailer لا يتبع هذه الواجهة مباشرة. سيتم استخدام المحول لتكييف PHPMailer مع الواجهة المتوقعة من قبل النظام.

تثبيت PHPMailer عبر الملحن

يتطلب الملحن phpmailer/phpmailer
composer require phpmailer/phpmailer

نظام الدليل

؟محول ┣ ؟سرك ┃ ┣ واجهات ┃ ┃ ┗ ?IMailer.php ┃ ┣ محولات ┃ ┃ ┗ PHPMailerAdapter.php ┃ ┗ الخدمات ┃ ┗ ?ServicoDeEmail.php ┣ ؟ بائع ┣ ؟composer.json ┗ ؟index.php
composer require phpmailer/phpmailer

التحميل التلقائي

في ملف Composer.json (الموجود في جذر المشروع)، أضف مساحة اسم التطبيق لتحميل الفئات تلقائيًا:


{ "التحميل التلقائي": { "بي إس آر-4": { "التطبيق\\": "src/" } }, "يتطلب": { "phpmailer/phpmailer": "^6.5" } }
composer require phpmailer/phpmailer

واجهة IMailer

تطبيق\واجهات مساحة الاسم؛ واجهة آي ميلر { إرسال الوظيفة العامة($to, $subject, $message); }
composer require phpmailer/phpmailer

فئة PHPMailerAdapter

تطبيق \ محولات مساحة الاسم ؛ استخدم PHPMailer\PHPMailer\PHPMailer؛ استخدم PHPMailer\PHPMailer\Exception؛ استخدم التطبيق\الواجهات\IMailer؛ فئة PHPMailerAdapter تنفذ IMailer { خاص $phpMailer؛ الوظيفة العامة __ بناء () { $this->phpMailer = new PHPMailer(true); // تكوين PHPMailer الأساسي $this->phpMailer->isSMTP(); $this->phpMailer->Host = 'smtp.example.com'; $this->phpMailer->SMTPAuth = true; $this->phpMailer->Username = '[email protected]'; $this->phpMailer->Password = 'password'; $this->phpMailer->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; $this->phpMailer->Port = 587; $this->phpMailer->setFrom('[email protected]', 'Your Name'); } }
composer require phpmailer/phpmailer
  • طريقة الإرسال
إرسال الوظيفة العامة($to, $subject, $message) { يحاول { $this->phpMailer->addAddress($to); $this->phpMailer->Subject = $subject; $this->phpMailer->Body = $message; $this->phpMailer->send(); صدى "تم إرسال البريد الإلكتروني بنجاح!"; } التقاط (استثناء $e) { echo "فشل إرسال البريد الإلكتروني: {$this->phpMailer->ErrorInfo}"; } }
composer require phpmailer/phpmailer

خدمة البريد الإلكتروني للفصل

تطبيق\خدمات مساحة الاسم؛ استخدم التطبيق\الواجهات\IMailer؛ فئة خدمة البريد الإلكتروني { الارسال $ الخاص؛ الوظيفة العامة __construct(IMailer $mailer) { $this->mailer = $mailer; } }
composer require phpmailer/phpmailer
  • طريقة إرسال البريد الإلكتروني إلى العميل
الوظيفة العامة sendEmailToClient($to, $subject, $message) { $this->mailer->send($to, $subject, $message); }
composer require phpmailer/phpmailer

ملف Index.php

يتطلب "vendor/autoload.php"؛ استخدم App\Adapters\PHPMailerAdapter; استخدم التطبيق\الخدمات\EmailService؛ // إنشاء محول PHPMailer $mailer = new PHPMailerAdapter(); // استخدام خدمة البريد الإلكتروني مع واجهة IMailer $emailService = new EmailService($mailer); // إرسال بريد إلكتروني $emailService->sendEmailToClient('[email protected]', 'موضوع البريد الإلكتروني', 'محتوى الرسالة.');
composer require phpmailer/phpmailer

شرح الهيكل

    IMailer.php: يحدد واجهة IMailer التي يجب على أي نظام بريد إلكتروني تنفيذها.
  • PHPMailerAdapter.php: يتكيف PHPMailer مع واجهة IMailer.
  • EmailService.php: خدمة البريد الإلكتروني التي تستخدم واجهة IMailer لإرسال رسائل البريد الإلكتروني.
  • Index.php: الملف الرئيسي الذي يستخدم خدمة البريد الإلكتروني لإرسال رسالة.
بيان الافراج يتم استنساخ هذه المقالة على: https://dev.to/xxzeroxx/php-design-pattern-adapter-3HI1؟1 إذا كان هناك أي انتهاك ، فيرجى الاتصال بـ [email protected] لحذفه.
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3