🚀 رحلتك لتعلم البرمجة كائنية التوجه (OOP) في PHP

أهلاً بك يا بطل في واحدة من أهم محطات تعلم لغة PHP! حتى الآن، كنت تكتب الأكواد بطريقة تسمى "البرمجة الإجرائية" (Procedural Programming)، حيث تضع الأوامر واحداً تلو الآخر. لكن مع نمو المشاريع، يصبح من الصعب إدارة الكود. هنا يأتي دور البرمجة كائنية التوجه (OOP).

ببساطة، الـ OOP هي طريقة في كتابة الكود تهدف إلى محاكاة الواقع. بدلاً من التفكير في "وظائف" فقط، سنبدأ بالتفكير في "كائنات" (Objects). 📦


💡 ما هي الـ OOP ببساطة؟

تخيل أنك تريد برمجة نظام لشركة سيارات. في البرمجة العادية، قد تضطر لإنشاء متغيرات منفصلة لكل سيارة (لون السيارة الأولى، سرعة السيارة الأولى، لون السيارة الثانية، وهكذا).

أما في OOP، فنحن نقوم بإنشاء "قالب" أو "مخطط" عام يسمى Class (كلاس)، وهذا القالب يحتوي على كل مواصفات السيارة. ثم نقوم بإنشاء "نسخ" حقيقية من هذا القالب تسمى Objects (كائنات).

مثال من الواقع:

  • الكلاس (Class): هو "الرسم الهندسي" للسيارة (يحدد أنها يجب أن يكون لها لون، موديل، وسرعة).
  • الكائن (Object): هو "السيارة الفعلية" التي تم تصنيعها من ذلك الرسم (سيارة حمراء، تويوتا، سرعتها 200 كم/س).

🏗️ أولاً: كيف ننشئ كلاس (Class) في PHP؟

لكي ننشئ كلاس، نستخدم الكلمة المحجوزة class متبوعة باسم الكلاس. ملاحظة هامة: يفضل دائماً أن يبدأ اسم الكلاس بحرف كبير (Uppercase).

لنطبق مثال السيارة:

<?php
// تعريف كلاس يمثل السيارة
class Car {
    // هنا سنضع الخصائص والوظائف لاحقاً
}
?>

في هذا المثال، قمنا بتعريف "قالب" اسمه Car. هذا القالب حالياً فارغ، لكنه يخبر PHP أن أي شيء سيتم إنشاؤه من هذا الكلاس سيكون عبارة عن "سيارة".


🚗 ثانياً: كيف ننشئ كائن (Object) من الكلاس؟

الكلاس وحده لا يفعل شيئاً، هو مجرد "مخطط". لكي نستخدمه، يجب أن ننشئ منه "كائناً" (Object) باستخدام الكلمة المحجوزة new.

<?php
class Car {
    // كلاس بسيط فارغ حالياً
}

// إنشاء كائن (Object) من كلاس السيارة
$myCar = new Car(); 

echo "Object created successfully!"; // رسالة تأكيد
?>

هنا، المتغير $myCar أصبح الآن عبارة عن "كائن" يمثل سيارة حقيقية مأخوذة من القالب Car.


🎨 ثالثاً: إضافة الخصائص (Properties)

الآن، دعنا نجعل الكلاس مفيداً. السيارات لها صفات (لون، موديل، سنة صنع). في الـ OOP، نسمي هذه الصفات Properties (خصائص)، وهي ببساطة متغيرات يتم تعريفها داخل الكلاس.

<?php
class Car {
    // خصائص الكلاس (Properties)
    public $color;
    public $model;
    public $year;
}

// إنشاء الكائن الأول (سيارة تويوتا)
$car1 = new Car();
$car1->color = "Red";    // تعيين قيمة للخاصية
$car1->model = "Toyota"; // تعيين قيمة للخاصية
$car1->year = 2022;      // تعيين قيمة للخاصية

// إنشاء الكائن الثاني (سيارة بي إم دبليو)
$car2 = new Car();
$car2->color = "Black";
$car2->model = "BMW";
$car2->year = 2023;

// طباعة البيانات
echo "Car 1 is " . $car1->color . " " . $car1->model; 
echo "<br>"; 
echo "Car 2 is " . $car2->color . " " . $car2->model;
?>

شرح الكود:

  1. استخدمنا كلمة public قبل المتغيرات لكي نستطيع الوصول إليها من خارج الكلاس (سنتعلم تفاصيل أكثر عن هذا لاحقاً).
  2. استخدمنا السهم -> للوصول إلى الخاصية وتحديد قيمتها داخل الكائن.

🛠️ رابعاً: إضافة الوظائف (Methods)

السيارة لا تملك صفات فقط، بل تقوم بأفعال أيضاً (مثل: التحرك، التوقف، التزمير). في الـ OOP، نسمي الوظائف التي يؤديها الكائن Methods (ميثودز)، وهي ببساطة دوال (Functions) توضع داخل الكلاس.

<?php
class Car {
    public $color;
    public $model;

    // تعريف ميثود (وظيفة) داخل الكلاس
    public function startEngine() {
        return "The engine of " . $this->model . " has started! 🔑";
    }
}

$myCar = new Car();
$myCar->model = "Tesla";

// استدعاء الميثود (الوظيفة)
echo $myCar->startEngine(); 
?>

ملاحظة تقنية: استخدمنا $this->model داخل الميثود. كلمة $this تعني "هذا الكائن"، أي أنها تخبر PHP أن يستخدم القيمة الموجودة في الخاصية model التابعة لهذا الكائن تحديداً.


✅ ملخص سريع لما تعلمناه:

  1. Class: هو القالب أو المخطط العام (مثل رسم السيارة).
  2. Object: هو النسخة الفعلية التي يتم إنشاؤها من الكلاس (مثل السيارة الحقيقية).
  3. Properties: هي المتغيرات التي تصف الكائن (مثل اللون والموديل).
  4. Methods: هي الدوال التي تحدد سلوك الكائن (مثل تشغيل المحرك).

⏭️ ماذا سنتعلم في الدرس القادم؟

الآن بعد أن عرفنا كيف ننشئ كلاس وكائن بسيط، سننتقل إلى موضوع حيوي جداً وهو "المنشئ (Constructor)". سنتعلم كيف نجعل الكلاس يطلب البيانات الأساسية (مثل الموديل واللون) فور إنشاء الكائن مباشرة دون الحاجة لكتابتها سطراً بسطر! نراك هناك! 👋