المدونة مدونة المهندس محمد خطيب

المفاهيم المتقدمة في البرمجة الكائنية في PHP: التعدد الشكلي والتغليف

almfahym-almtkdm-fy-albrmg-alkayny-fy-php-altaadd-alshkly-oaltghlyf

المفاهيم المتقدمة في البرمجة الكائنية في PHP: التعدد الشكلي والتغليف

تاريخ النشر:

مقدمة

في المقالة السابقة، استعرضنا أساسيات البرمجة الكائنية (OOP) في PHP مثل الكائنات، الصفوف، الوراثة، والتجريد. في هذه المقالة، سنتعمق أكثر في المفاهيم المتقدمة في OOP، بما في ذلك التعدد الشكلي (Polymorphism) والتغليف (Encapsulation).

التعدد الشكلي (Polymorphism)

التعدد الشكلي هو مفهوم يسمح للدوال بالتصرف بطرق مختلفة بناءً على الكائن الذي تستدعى عليه. يمكن تحقيق التعدد الشكلي من خلال الوراثة والتجريد. إليك مثال على ذلك:

<?php
interface Shape {
    public function area();
}

class Circle implements Shape {
    private $radius;

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

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

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

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

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

function printArea(Shape $shape) {
    echo "Area: " . $shape->area() . "\n";
}

$circle = new Circle(5);
$rectangle = new Rectangle(4, 6);

printArea($circle);    // يعرض: Area: 78.539816339745
printArea($rectangle); // يعرض: Area: 24
?>

في هذا المثال، لدينا واجهة Shape مع دالة area. كلا الصفين Circle وRectangle يطبقان هذه الواجهة، وكل منهما لديه طريقته الخاصة لحساب المساحة. الدالة printArea تأخذ كائنًا من نوع Shape وتستدعي دالة area، مما يوضح التعدد الشكلي.

التغليف (Encapsulation)

التغليف هو مفهوم يخفي تفاصيل التنفيذ الداخلية للصف عن المستخدمين، مما يسمح بالتحكم في كيفية الوصول إلى البيانات وتعديلها. يتم تحقيق التغليف باستخدام محددات الوصول مثل private، protected، وpublic. إليك مثال:

<?php
class BankAccount {
    private $balance;

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

    public function deposit($amount) {
        if ($amount > 0) {
            $this->balance += $amount;
        }
    }

    public function withdraw($amount) {
        if ($amount > 0 && $amount <= $this->balance) {
            $this->balance -= $amount;
        }
    }

    public function getBalance() {
        return $this->balance;
    }
}

$account = new BankAccount(100);
$account->deposit(50);
$account->withdraw(30);
echo "Balance: " . $account->getBalance(); // يعرض: Balance: 120
?>

في هذا المثال، يتم تحديد خاصية $balance كمحدد الوصول private، مما يعني أنه لا يمكن الوصول إليها مباشرة من خارج الصف. يتم تعديل $balance من خلال الدوال deposit وwithdraw، ويتم عرض قيمتها باستخدام الدالة getBalance. هذا يضمن أن الرصيد لا يمكن تعديله إلا من خلال العمليات المحددة.

في هذه المقالة، استعرضنا مفاهيم التعدد الشكلي (Polymorphism) والتغليف (Encapsulation) في البرمجة الكائنية باستخدام PHP. هذه المفاهيم تساعد على كتابة كود أكثر أمانًا ومرونة وقابلية للصيانة. في المقالة القادمة، سنستعرض المزيد من المفاهيم المتقدمة في البرمجة الكائنية. تابعنا لتستمر في تعلم المزيد!