العودة إلى الدورة

الواجهات (Interfaces) وتعدد الأشكال (Polymorphism)

PHP: الدورة التدريبية المكثفة الكاملة من الصفر إلى الاحتراف

40. الواجهات وتعدد الأشكال

توفر الواجهات طريقة قوية أخرى لفرض الهيكل. إنها تحدد عقدًا: يجب على أي فئة تطبق واجهة أن تطبق جميع الدوال المدرجة في تلك الواجهة.

تعريف واجهة

  • يتم تعريفها باستخدام الكلمة المفتاحية interface.
  • يجب أن تكون جميع الدوال في الواجهة عامة (public).
  • تحتوي الواجهات على تواقيع الدوال فقط، ولا تحتوي على منطق أو خصائص (باستثناء الثوابت).

php

<?php interface PaymentGateway { public function processPayment($amount); public function refundTransaction($id); // لا يسمح بنص للدالة! } ?>

تطبيق واجهة

تستخدم الفئة الكلمة المفتاحية implements لتبني واجهة. إذا فشلت في تطبيق جميع الدوال المطلوبة، فإن ذلك يؤدي إلى خطأ فادح.

php

<?php class StripeGateway implements PaymentGateway { public function processPayment($amount) { // منطق خاص بـ Stripe... echo "Stripe تعالج $amount من الدولارات."; } public function refundTransaction($id) { // منطق خاص بـ Stripe... echo "Stripe تقوم باسترداد المعاملة $id."; } } class PayPalGateway implements PaymentGateway { public function processPayment($amount) { // منطق خاص بـ PayPal... echo "PayPal تعالج $amount من الدولارات."; } public function refundTransaction($id) { // منطق خاص بـ PayPal... echo "PayPal تقوم باسترداد المعاملة $id."; } } ?>

تعدد الأشكال عمليًا

نظرًا لأن كلتا الفئتين تطبقان نفس الواجهة، يمكننا استخدامهما بالتبادل، بالاعتماد على تواقيع الدوال المشتركة (processPayment). هذا هو تعدد الأشكال.

php

<?php function handleTransaction(PaymentGateway $gateway, $amount) { // لا يهمنا ما إذا كانت Stripe أو PayPal، بل فقط أن لديها الدالة. $gateway->processPayment($amount); } handleTransaction(new StripeGateway(), 500); handleTransaction(new PayPalGateway(), 250); ?>