PHP

الجزء التاسع – المفاهيم المتقدمة في PHP: البرمجة الكائنية (OOP) وأنماط التصميم (Design Patterns) – سلسلة FSWD – PHP

أولاً: البرمجة الكائنية (Object-Oriented Programming – OOP)

البرمجة الكائنية هي طريقة لتنظيم الكود حول الكائنات (Objects) بدلاً من الإجراءات (Procedures). الكائنات هي وحدات تحتوي على بيانات (تسمى الخصائص – Properties) ودوال (تسمى الأساليب – Methods) يمكن أن تتفاعل مع البيانات.

الـ OOP توفر العديد من المفاهيم الأساسية التي تجعل الكود أكثر مرونة وقابلية لإعادة الاستخدام والتوسع.

المفاهيم الأساسية في البرمجة الكائنية:

  1. الفئات (Classes):

    • الفئة هي قالب لإنشاء الكائنات. تحدد الفئة الخصائص والأساليب التي ستتمتع بها الكائنات.

  2. الكائنات (Objects):

    • الكائن هو نسخة من الفئة، ويحتوي على البيانات والأساليب المحددة في الفئة.

  3. التوريث (Inheritance):

    • يمكن لفئة أن ترث الخصائص والأساليب من فئة أخرى.

  4. التغليف (Encapsulation):

    • إخفاء البيانات الداخلية وحمايتها من التلاعب الخارجي. يتم ذلك باستخدام التعديلات مثل public, protected, و private.

  5. التعددية الشكلية (Polymorphism):

    • إمكانية استخدام الأساليب بنفس الاسم ولكن مع سلوكيات مختلفة في فئات مختلفة.


كيفية إنشاء فئة (Class) وكائن (Object):

مثال على فئة وكائن

<?php
// تعريف فئة
class Car {
    // الخصائص
    public $make;
    public $model;
    public $year;

    // دالة (أسلوب) لتعيين البيانات
    public function setDetails($make, $model, $year) {
        $this->make = $make;
        $this->model = $model;
        $this->year = $year;
    }

    // دالة لعرض البيانات
    public function displayDetails() {
        echo "السيارة: " . $this->year . " " . $this->make . " " . $this->model . "<br>";
    }
}

// إنشاء كائن من الفئة
$car1 = new Car();
$car1->setDetails("Toyota", "Corolla", 2022);
$car1->displayDetails();
?>

شرح الكود:

  • قمنا بإنشاء فئة Car تحتوي على ثلاث خصائص ($make, $model, $year) ودالتين (setDetails() و displayDetails()).

  • استخدمنا new Car() لإنشاء كائن من الفئة.

  • قمنا بتعيين القيم إلى الخصائص باستخدام دالة setDetails().

  • قمنا بعرض التفاصيل باستخدام دالة displayDetails().


التوريث (Inheritance):

التوريث يسمح لفئة أن ترث الخصائص والأساليب من فئة أخرى.

مثال على التوريث

<?php
// فئة أساسية
class Animal {
    public $name;

    public function setName($name) {
        $this->name = $name;
    }

    public function speak() {
        echo $this->name . " makes a sound.<br>";
    }
}

// فئة مشتقة ترث من الفئة الأساسية
class Dog extends Animal {
    public function speak() {
        echo $this->name . " barks.<br>";  // نغير السلوك هنا
    }
}

// إنشاء كائنات من الفئات
$animal = new Animal();
$animal->setName("Generic Animal");
$animal->speak();

$dog = new Dog();
$dog->setName("Rex");
$dog->speak();
?>

شرح الكود:

  • فئة Animal تحتوي على خصائص ودوال لتعيين الاسم وإصدار الصوت.

  • فئة Dog ترث من فئة Animal وتقوم بتعديل دالة speak() لتصدر صوت الكلب بدلاً من الصوت العام.

  • تم استخدام الكود لإنشاء كائنات من الفئتين واختبار التوريث.


التغليف (Encapsulation):

التغليف هو طريقة إخفاء التفاصيل الداخلية للكود عن المستخدم، عن طريق استخدام المستوى العام public أو المستوى الخاص private.

مثال على التغليف

<?php
class BankAccount {
    // الخصائص الخاصة
    private $balance = 0;

    // دالة عامة للإيداع
    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();
$account->deposit(1000);
$account->withdraw(500);

echo "رصيد الحساب: " . $account->getBalance() . " جنيه<br>";
?>

شرح الكود:

  • تم استخدام الخصائص private لضمان عدم التلاعب بها من خارج الكائن.

  • الدوال deposit() و withdraw() توفر واجهة للتفاعل مع الرصيد.

  • دالة getBalance() لعرض الرصيد.


ثانيًا: أنماط التصميم (Design Patterns)

أنماط التصميم هي حلول معتمدة لمشاكل متكررة في البرمجة. سنغطي نمطي Singleton و Factory في هذا الشرح.

1. نمط Singleton:

نمط Singleton يضمن أن هناك كائن واحد فقط من الفئة طوال مدة حياة التطبيق.

مثال على Singleton

<?php
class Singleton {
    // خصائص ثابتة لتخزين الكائن
    private static $instance;

    // جعل المُنشئ private لتجنب إنشاء كائنات أخرى
    private function __construct() {}

    // دالة لإرجاع الكائن الوحيد
    public static function getInstance() {
        if (self::$instance == null) {
            self::$instance = new Singleton();
        }
        return self::$instance;
    }

    public function displayMessage() {
        echo "أنا الكائن الوحيد في التطبيق!<br>";
    }
}

// استخدام Singleton
$singleton1 = Singleton::getInstance();
$singleton1->displayMessage();

$singleton2 = Singleton::getInstance();
echo $singleton1 === $singleton2 ? "نفس الكائن" : "كائنات مختلفة";  // يطبع "نفس الكائن"
?>

شرح الكود:

  • يتم تخزين الكائن الوحيد في الخاصية الثابتة private static $instance.

  • يتم منع إنشاء كائنات جديدة باستخدام مُنشئ خاص private.

  • دالة getInstance() تتحقق من وجود الكائن، وإذا لم يكن موجودًا، تنشئه.

  • تم اختبار الكود عن طريق إنشاء كائنين ومقارنتهما.


2. نمط Factory:

نمط Factory يُستخدم لإنشاء كائنات بدون الحاجة لمعرفة تفاصيل كيفية إنشائها.

مثال على Factory

<?php
// فئة الأساس
class Animal {
    public function speak() {
        return "Animal makes a sound";
    }
}

// فئة مخصصة للكلب
class Dog extends Animal {
    public function speak() {
        return "Dog barks";
    }
}

// فئة مخصصة للقط
class Cat extends Animal {
    public function speak() {
        return "Cat meows";
    }
}

// مصنع لإنشاء الكائنات
class AnimalFactory {
    public static function createAnimal($type) {
        if ($type == "dog") {
            return new Dog();
        } elseif ($type == "cat") {
            return new Cat();
        } else {
            return new Animal();
        }
    }
}

// استخدام المصنع لإنشاء كائنات
$dog = AnimalFactory::createAnimal("dog");
echo $dog->speak();  // Dog barks

$cat = AnimalFactory::createAnimal("cat");
echo $cat->speak();  // Cat meows
?>

شرح الكود:

  • تم استخدام Factory لإنشاء كائنات من فئات مختلفة بناءً على نوع الحيوان الذي نطلبه.

  • دالة createAnimal() في فئة AnimalFactory تقرر الفئة المناسبة لإنشائها بناءً على المدخلات.


ملخص:

  1. OOP في PHP تعزز القابلية لإعادة الاستخدام والتنظيم من خلال المفاهيم الأساسية مثل الفئات، الكائنات، التوريث، التغليف، و التعددية الشكلية.

  2. أنماط التصميم مثل Singleton و Factory توفر حلولاً مرنة ومتوافقة مع متطلبات التطبيق.

كود متكامل

<?php
// OOP Example: Singleton
class Singleton {
    private static $instance;

    private function __construct() {}

    public static function getInstance() {
        if (self::$instance == null) {
            self::$instance = new Singleton();
        }
        return self::$instance;
    }

    public function displayMessage() {
        echo "أنا الكائن الوحيد في التطبيق!<br>";
    }
}

// Factory Example
class Animal {
    public function speak() {
        return "Animal makes a sound";
    }
}

class Dog extends Animal {
    public function speak() {
        return "Dog barks";
    }
}

class AnimalFactory {
    public static function createAnimal($type) {
        if ($type == "dog") {
            return new Dog();
        }
        return new Animal();
    }
}

// استخدام Singleton
$singleton = Singleton::getInstance();
$singleton->displayMessage();

// استخدام Factory
$dog = AnimalFactory::createAnimal("dog");
echo $dog->speak();  // Dog barks
?>

 

فرص الربح من الإنترنت

💰 هل تبحث عن طريقة سهلة للربح من الإنترنت؟

ابدأ الآن واكسب أموالًا حقيقية من خلال خطوات بسيطة! 🌟

اضغط وابدأ الربح

📱 اربح من هاتفك فقط!

كل ما تحتاجه هو اتصال بالإنترنت وبعض الوقت ⏳

ابدأ الربح الآن

🚀 اربح المال وأنت في بيتك

الفرصة أمامك الآن وبخطوات سهلة ومضمونة!

من هنا تبدأ رحلتك

🔥 لا تحتاج إلى خبرة أو رأس مال!

اربح الآن من الإنترنت بأبسط الطرق

اضغط هنا للربح

💸 دخل إضافي بدون تعب؟

🤩 هذه فرصتك لتبدأ في الربح من الإنترنت!

سارع الآن

مقالات ذات صلة

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

زر الذهاب إلى الأعلى