ملخص - معالج الدفع (Payment Processor)
جزء من قسم Object Oriented Programming في رحلة PHP على Coddy — الدرس 37 من 91.
التحدي
سهللنقم ببناء نظام معالجة مدفوعات كامل يجمع كل ما تعلمته عن تعدد الأشكال (polymorphism). ستقوم بإنشاء بنية تعتمد على الواجهات (interfaces) حيث يمكن معالجة طرق دفع مختلفة من خلال معالج واحد موحد — مما يوضح كيف يجعل تعدد الأشكال الكود مرناً وقابلاً للتوسع.
ستقوم بتنظيم الكود الخاص بك عبر خمسة ملفات:
PaymentMethod.php— قم بتعريف واجهةPaymentMethodمع توقيعين للدوال:process(float $amount): stringلمعالجة الدفع، ودالة ثابتة (static method) باسمgetMethodName(): stringتعيد اسم نوع الدفع. يضمن هذا العقد إمكانية معالجة أي طريقة دفع بشكل موحد.CreditCard.php— أنشئ فئةCreditCardتقوم بتنفيذ (implements) الواجهةPaymentMethod. قم بتضمين ملف الواجهة. يجب أن تحتوي الفئة على خاصية خاصة$lastFourDigitsيتم تعيينها من خلال المنشئ (constructor). قم بتنفيذprocess()لتعيد"Processing $[amount] via Credit Card ending in [lastFourDigits]"(قم بتنسيق المبلغ إلى منزلتين عشريتين). قم بتنفيذ الدالة الثابتةgetMethodName()باستخدام الربط الاستاتيكي المتأخر (late static binding) لتعيد"Credit Card".PayPal.php— أنشئ فئةPayPalتقوم بتنفيذ الواجهةPaymentMethod. قم بتضمين ملف الواجهة. يجب أن تحتوي الفئة على خاصية خاصة$emailيتم تعيينها من خلال المنشئ. قم بتنفيذprocess()لتعيد"Processing $[amount] via PayPal account [email]"(قم بتنسيق المبلغ إلى منزلتين عشريتين). قم بتنفيذ الدالة الثابتةgetMethodName()لتعيد"PayPal".PaymentProcessor.php— أنشئ فئةPaymentProcessorالتي تنسق عمليات الدفع. قم بتضمين ملف الواجهة. أضف دالةexecutePayment(PaymentMethod $method, float $amount): stringتستخدم تلميح النوع (type hinting) للواجهة لقبول أي طريقة دفع. يجب أن تعيد هذه الدالة نتيجة استدعاءprocess()على طريقة الدفع. أضف دالة أخرىdescribeMethod(PaymentMethod $method): stringتعيد"Payment via: [methodName]"باستخدام الدالة الثابتةgetMethodName()من فئة طريقة الدفع الممرة.main.php— قم بتضمين جميع ملفات فئات الدفع والمعالج. أنشئ مثيلاً (instance) منPaymentProcessor. ستتلقى ثلاثة مدخلات: آخر أربعة أرقام من بطاقة ائتمان، وعنوان بريد إلكتروني لـ PayPal، ومبلغ الدفع. أنشئ مثيلاً لكل منCreditCardوPayPalبمعرفاتهما الخاصة. قم بتحويل المبلغ إلى float. استخدم المعالج لتنفيذ عملية دفع ببطاقة الائتمان أولاً، ثم باستخدام PayPal. اطبع كل نتيجة في سطر مستقل. أخيراً، اطبع وصف الطريقة لطريقة دفع PayPal.
جمال هذا التصميم هو أن PaymentProcessor الخاص بك لا يعرف أي شيء عن بطاقات الائتمان أو PayPal بشكل محدد — فهو يعرف فقط واجهة PaymentMethod. يمكنك إضافة فئة BankTransfer أو Cryptocurrency غداً، وسيتعامل المعالج معها دون أي تعديلات. هذه هي قوة تعدد الأشكال القائم على الواجهات مع الربط الاستاتيكي المتأخر!
جرّب بنفسك
<?php
// تضمين جميع الملفات المطلوبة
require_once 'CreditCard.php';
require_once 'PayPal.php';
require_once 'PaymentProcessor.php';
// قراءة المدخلات
$lastFourDigits = trim(fgets(STDIN));
$paypalEmail = trim(fgets(STDIN));
$amount = floatval(trim(fgets(STDIN)));
// TODO: إنشاء مثيل من PaymentProcessor
// TODO: إنشاء مثيل من CreditCard مع آخر أربعة أرقام
// TODO: إنشاء مثيل من PayPal مع البريد الإلكتروني
// TODO: تنفيذ الدفع باستخدام بطاقة الائتمان وطباعة النتيجة
// TODO: تنفيذ الدفع باستخدام PayPal وطباعة النتيجة
// TODO: طباعة وصف الطريقة لوسيلة دفع PayPal
?>جميع دروس Object Oriented Programming
1أساسيات OOP
الملفات الخارجيةمقدمة في OOPClasses مقابل Objectsالكلمة المفتاحية $thisالـ Methodsالـ Propertiesالمنشئ (__construct)الهادم (__destruct)مراجعة - آلة حاسبة بسيطة4الوراثة
الوراثة الأساسيةالكلمة المفتاحية parent::إعادة تعريف الدوال (Method Overriding)الكلمة المفتاحية finalالأصناف المجردة (Abstract Classes)مراجعة - هيكلية الموظفين7التغليف (Encapsulation)
العام، المحمي، الخاص (Public, Protected, Private)نظرة متعمقة على معدلات الوصولدوال Getters و Settersإخفاء المعلوماتميزة Constructor Promotion (8.0)مراجعة - نظام سجلات الطلاب10مفاهيم البرمجة كائنية التوجه المتقدمة
التركيب مقابل الوراثةحقن التبعيةالأصناف المجهولةالتعدادات (PHP 8.1)الألياف (PHP 8.1)تعمق في استنساخ الكائناتالمولدات والمكررات13أنماط التصميم - الجزء الثاني
نمط الأمرنمط المحولنمط المزيننمط طريقة القالبنمط الحالةنمط التركيبنمط المستودع2مساحات الأسماء والتحميل التلقائي
مقدمة إلى مساحات الأسماءالكلمة المفتاحية useمعيار التحميل التلقائي PSR-4أداة التحميل التلقائي Composerملخص - مشروع منظم5الواجهات والعقود
مقدمة إلى الواجهاتتنفيذ الواجهاتتنفيذ واجهات متعددةالواجهة مقابل الـ Abstract Classالـ Type Hinting مع الواجهاتملخص - حاسبة الأشكال8الميثودات السحرية (Magic Methods)
مقدمة في الميثودات السحرية__toString و __debugInfo__get, __set, __isset, __unset__call و __callStatic__clone واستنساخ الكائنات__serialize و __unserializeمراجعة - Custom Collection3خصائص الكلاس
خصائص الـ Instance مقابل الخصائص الساكنة (Static)الثوابت في الكلاساتالدوال والخصائص الساكنة (Static)الخصائص الخاصة (Private) والمحمية (Protected)خصائص للقراءة فقط (Readonly) في PHP 8.1مراجعة - مدير الحساب البنكي6تعدد الأشكال (Polymorphism)
مراجعة إعادة تعريف الدوال (Method Overriding)تعدد الأشكال عبر الـ Interfacesتلميح النوع (Type Hinting) وأنواع الاتحاد (Union Types)الربط الاستاتيكي المتأخر (Late Static Binding)ملخص - معالج الدفع (Payment Processor)