التعرف على تعدد الأشكال (Polymorphism) في PHP

تمت الكتابة بواسطة: عبد الحكيم

تارخ آخر تحديث: 19 ديسمبر 2024

محتوى المقال

التعرف على تعدد الأشكال (Polymorphism) في PHP

تعدد الأشكال (Polymorphism) هو مفهوم أساسي في البرمجة الكائنية (OOP)، وهو يشير إلى القدرة على استخدام كائنات مختلفة من فئات متعددة عبر واجهة مشتركة. يُمكّنك تعدد الأشكال من استدعاء نفس الطريقة على كائنات من فئات مختلفة، حيث تقوم كل فئة بتنفيذ تلك الطريقة بطريقة مختلفة. في هذا المقال، سنتعرف على كيفية استخدام تعدد الأشكال في PHP مع أمثلة عملية.

ما هو تعدد الأشكال (Polymorphism)؟

تعدد الأشكال يعني ببساطة "العديد من الأشكال". في البرمجة الكائنية، يمكن أن يكون لكائنات من فئات مختلفة طرق (Methods) بنفس الاسم، ولكن كل طريقة تعمل بشكل مختلف بناءً على الفئة التي تنتمي إليها. يُستخدم تعدد الأشكال لجعل الكود أكثر مرونة وقابلية للتوسع.

تطبيق تعدد الأشكال في PHP

لتطبيق تعدد الأشكال في PHP، نحتاج عادةً إلى استخدام الوراثة (Inheritance) أو الواجهات (Interfaces). الوراثة تسمح لنا بإنشاء فئة أساسية (Parent Class) وفئات فرعية (Child Classes) تتشارك في نفس الطريقة، ولكنها تنفذها بطرق مختلفة.

مثال باستخدام الوراثة

في هذا المثال، سنقوم بإنشاء فئة أساسية تُدعى Shape، وفئتين فرعيتين تُدعيان Circle وRectangle. كل فئة فرعية ستقوم بتنفيذ الطريقة area() بطريقة مختلفة.

<?php
class Shape {
    public function area() {
        return 'لم يتم تحديد الشكل';
    }
}

class Circle extends Shape {
    private $radius;

    public function __construct($radius) {
        $this->radius = $radius;
    }

    public function area() {
        return pi() * $this->radius * $this->radius;
    }
}

class Rectangle extends Shape {
    private $width;
    private $height;

    public function __construct($width, $height) {
        $this->width = $width;
        $this->height = $height;
    }

    public function area() {
        return $this->width * $this->height;
    }
}

// إنشاء كائنات من الفئات المختلفة
$circle = new Circle(5);
$rectangle = new Rectangle(4, 6);

// استدعاء طريقة area() على الكائنات
echo "مساحة الدائرة: " . $circle->area() . "
"
;
echo "مساحة المستطيل: " . $rectangle->area() . "
"
;
?>

في هذا المثال، تم إنشاء فئتين فرعيتين Circle و Rectangle من الفئة الأساسية Shape. الفئة Circle تقوم بتنفيذ طريقة area() لحساب مساحة الدائرة، بينما تقوم الفئة Rectangle بتنفيذ نفس الطريقة لحساب مساحة المستطيل.

تعدد الأشكال باستخدام الواجهات (Interfaces)

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

مثال باستخدام واجهة

في هذا المثال، سنقوم بإنشاء واجهة تُدعى Drawable، والتي تحتوي على دالة draw(). بعد ذلك، سنقوم بإنشاء فئات تنفذ هذه الواجهة بطرق مختلفة.

<?php
interface Drawable {
    public function draw();
}

class Circle implements Drawable {
    public function draw() {
        echo "رسم دائرة";
    }
}

class Square implements Drawable {
    public function draw() {
        echo "رسم مربع";
    }
}

// إنشاء كائنات من الفئات التي تنفذ الواجهة
$shapes = [new Circle(), new Square()];

// استدعاء طريقة draw() على كل كائن
foreach ($shapes as $shape) {
    $shape->draw();
    echo "
"
;
}
?>

في هذا المثال، الفئتان Circle و Square تنفذان واجهة Drawable، وكل منهما يقدم تنفيذًا مختلفًا للدالة draw(). عند استدعاء هذه الدالة على الكائنات، سيتم تنفيذ الطريقة الخاصة بكل فئة.

الخلاصة

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

طور مهاراتك: مقالات يجب قراءتها في البرمجة