🏗️ الدرس 9 من 13
البرمجة كائنية التوجه
Classes, Objects & Inheritance
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 الأب باستخدام
مبادئ OOP الأربعة:
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 الأب؟