/ دورة PHP الشاملة
0/13 مكتملة
🏗️ الدرس 9 من 13

البرمجة كائنية التوجه

Classes, Objects & Inheritance

🕐 20-30 دقيقة 📝 5 أسئلة 💻 2 أمثلة برمجية

Classes و Objects

البرمجة كائنية التوجه (OOP) هي أسلوب برمجة يعتمد على تمثيل الأشياء الحقيقية كـ Objects في الكود.

المفاهيم الأساسية:
  • Class: قالب/مخطط يصف كيان ما (مثل "السيارة")
  • Object: نسخة من الـ Class ("سيارتي الحمراء")
  • Property: خاصية/صفة (لون السيارة، موديلها)
  • Method: وظيفة داخل الـ Class (تشغيل السيارة، إيقافها)
  • Constructor: دالة تُستدعى تلقائياً عند إنشاء الـ Object
PHP
<?php
// تعريف Class
class Car {
    // Properties (الخصائص)
    public string $brand;
    public string $color;
    private int $speed = 0;

    // Constructor
    public function __construct(string $brand, string $color) {
        $this->brand = $brand;
        $this->color = $color;
    }

    // Methods (الوظائف)
    public function accelerate(int $amount): void {
        $this->speed += $amount;
    }

    public function getInfo(): string {
        return "{$this->brand} {$this->color} - {$this->speed} كم/ساعة";
    }
}

// إنشاء Objects
$car1 = new Car("Toyota", "أحمر");
$car2 = new Car("BMW",    "أسود");

$car1->accelerate(60);
$car1->accelerate(20);

echo $car1->getInfo() . "<br>"; // Toyota أحمر - 80 كم/ساعة
echo $car2->getInfo() . "<br>"; // BMW أسود - 0 كم/ساعة

echo $car1->brand . "<br>"; // Toyota
// echo $car1->speed; // خطأ! speed هو private
?>
الناتج المتوقع
Toyota أحمر - 80 كم/ساعة BMW أسود - 0 كم/ساعة Toyota

الوراثة (Inheritance)

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

مبادئ OOP الأربعة:
  • Encapsulation: إخفاء التفاصيل الداخلية (private/protected)
  • Inheritance: الوراثة (extends)
  • Polymorphism: تعدد الأشكال (override)
  • Abstraction: التجريد (abstract class / interface)
PHP
<?php
// Class أساسي
class Animal {
    protected string $name;
    protected string $sound;

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

    public function speak(): void {
        echo "{$this->name} يقول: {$this->sound}<br>";
    }

    public function __toString(): string {
        return "حيوان: {$this->name}";
    }
}

// كلاس فرعي يرث من Animal
class Dog extends Animal {
    public function __construct(string $name) {
        parent::__construct($name); // استدعاء constructor الأب
        $this->sound = "هاو هاو!";
    }

    // Override: تعديل وظيفة الأب
    public function speak(): void {
        echo "🐕 {$this->name}: {$this->sound}<br>";
    }

    public function fetch(): void {
        echo "{$this->name} يجلب الكرة! 🎾<br>";
    }
}

class Cat extends Animal {
    public function __construct(string $name) {
        parent::__construct($name);
        $this->sound = "مياو!";
    }
}

$dog = new Dog("ريكس");
$cat = new Cat("ميسي");

$dog->speak(); // 🐕 ريكس: هاو هاو!
$cat->speak(); // ميسي يقول: مياو!
$dog->fetch(); // ريكس يجلب الكرة!
?>
الناتج المتوقع
🐕 ريكس: هاو هاو! ميسي يقول: مياو! ريكس يجلب الكرة! 🎾
🧠

اختبر فهمك — البرمجة كائنية التوجه

5/5 للمتابعة
السؤال 1
ما الكلمة المفتاحية لإنشاء كائن من class؟
السؤال 2
ما دالة تُستدعى تلقائياً عند إنشاء Object؟
السؤال 3
ما مستوى الوصول الذي يسمح للكلاسات الأبناء بالوصول لكن ليس للكود الخارجي؟
السؤال 4
ما الكلمة المفتاحية للوراثة في PHP؟
السؤال 5
كيف يستدعي الكلاس الابن constructor الأب؟