Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

ملخص - معالج الدفع (Payment Processor)

جزء من قسم Object Oriented Programming في رحلة PHP على Coddy — الدرس 37 من 91.

challenge icon

التحدي

سهل

لنقم ببناء نظام معالجة مدفوعات كامل يجمع كل ما تعلمته عن تعدد الأشكال (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