شرح البرمجة الكائنية PHP OOP من الصفر إلى الإحتراف - دورة كاملة في درس
- التفاصيل
- الزيارات: 29952
كبداية لو قلت لك ماذا ترى بجانبك على اليمين أو على اليسار أو فوقك أو تحتك أو أمامك، على العموم ستقول بجواري أشياء كثيرة ولاحظ كلمة أشياء باللون الأحمر ..
ماهي هذه الأشياء التي بجوارك ؟
الإجابة على هذا السؤال ستختلف من شخص إلى أخر، فمنهم من سيقول بجواري دولاب ومنهم سيقول طابعة الكمبيوتر ومنهم سيقول النافذة وهكذا ...
إذًا كل هذه أشياء، ولو قمت أنت بفتح النافذة فإن أي شئ تقع عينك عليه فإنه يعتبر شئ (thing)، فهناك قاعدة تقول : كل شئ في هذه الدنيا هو كائن.
- ماهو الكائن (Object)؟
- الخطوة الأولى:
كما ذكرنا أثناء الشرح النظري فإن أول خطوة أقوم بها هي تفصيل الكائن الخاص بي وإستخراج خصائصه وأساليبه ، وهنا دعونا نتابع مع الموبايل.
والآن افرض اننا خرجنا بالأساليب والخصائص التالية للموبايل.
-الخصائص:
1- اللون.
2- الشركة المصنعة .
-الأساليب:
1-الإتصال.
2-قطع الإتصال.
الآن استخرجنا الذي نريده كما ذكرنا على الوق فما هي إذًا الخطوة الثانية؟
- الخطوة الثانية:
الخطوة الثانية هنا هي أن نقوم بشرح كائن الجوال للكمبيوتر فكيف يكون ذلك ؟
بالنسبة للخصائص : فإنه يتم تمثيلها في لغة البرمجة بالمتغيرات Variables
بالنسبة للأساليب : فإنه يتم تمثيلها في لغة البرمجة بالدوال functions ولكن عندما تكون الدالة داخل كائن فإنه يطلق عليها أسم Method .
إذاً عندما ذكرنا في الجزء النظري أن الكائن هو مجموعة من الخصائص والأساليب فهذا نظرياً أما كائن الكمبيوتر فسيكون هو عبارة عن مجموعة من المتغيرات والدوال.، أي إذا أردت تمثيل خاصية اللون الخاصة بالموبايل فسأقول:
بما أنها خاصية فإني سأمثلها بمتغير وستكون كالتالي :
function mobilConnect()
{ //do something here ..! } |
الآن بعد أن عرفنا أن الكائن في الكمبيوتر هو عبارة عن متغيرات ودوال (خصائص وأساليب) .
إذاً بقي علينا أن نعرف الطريقة التي سنشرح بها للكمبيوتر فكيف نحدد مجموعة المتغيرات والدوال لكائن معين؟
بكلام أخر كيف نقول للكمبيوتر : ترى لدينا كائن جوال فيه الخصائص كذا والمتغيرات كذا ؟
الجواب هو كلمة class في php .
ولكن ماهو الـ class؟
لن أقوم بإعطائك كلام فلسفي ولكن بإختصار هنا كلمة كلاس هي لتخبر لغة php أنك ستقوم الآن بشرح خصائص وأساليب كائن معين، بكلام أخر فإن كلاس هو الخريطة الخاصة بالكائن أي أنك تقول للكمبيوتر سأشرح لك الكائن الفلاني، أي بكلام اخر أيضاً فإن الكلاس هو الشرح الخاص بالكائن وهو المكان الذي تضع فيه الأساليب والخصائص الخاصة بكائن معين وهي المتغيرات والدوال، فيصبح الكلاس الآن هو عبارة عن مجموعة من المتغيرات والدوال، ومن هذا الكلاس أقوم بتعريف الكائنات التي أريدها مثل كائن لجوال نوكيا وكائن لجوال اريكسون لأني قمت بشرح كائن الجوال للغة php عن طريق كلمة كلاس، أي أن كلاس هو شرح لمواصفات الكائن، ولكن كيف أبدأ الشرح، في البداية ستكتب كلمة كلاس وبعدها إسم الكلاس الذي ستشرحه وهنا سيكون Mobil كالتالي:
class Mobil
{ //class content here } |
class Mobil
{ //attributes var $color; var $company; //methods function Connect() { echo "connected ...!"; } function DisConnect() { echo "disconnected...!"; } } |
الآن أظن أننا شرحنا كيف سيكون شكل الكائن Mobil وفهمنا بي اتش بي أنه أي كائن من نوع Mobil، لكننا حتى الآن لم نقم بإنشاء كائن، نحن فقط قمنا بشرح فصيلة هذا الكائن، ولكن كيف نقوم بإنشاء كائن جديد؟
وإجابة هذا السؤال أن كل كائن يعبر عنه عن طريق متغير، ولكن قيمة هذا المتغير تحمل new ثم اسم الكلاس الذي قمنا بإنشاءه، مثل تلك الشيفرة:
$nokia = new Mobil();
|
الآن قمنا بإنشاء كائن يسمى nokia من التصنيف Mobile.
لكن كيف نستخدم الكائن؟ .. قد ذكرنا سابقاً أن إنشاء الكائن يتم كما رأينا بإستخدام كلمة new ..
ولقد أنشأنا كائن بإسم nokia الآن السؤال هنا هو كيف أستخدم الكائن nokia ؟
الجواب بكل بساطة فأنت عندما شرحت الكلاس Mobil فأنت تقول أي كائن يتم إنشائه من هذا الكلاس فإنه سيحتوي على دالتين هما Connect و DisConnect ومتغيرين هما color و company .
إذا فإن nokia سيحتوي على دالتين هما Connect و DisConnect و متغيرين هما color و company والسبب لأن المتغير أو الكائن nokia هو عبارة عن كائن من النوع Mobil، طيب السؤال الآن هو كيف أصل لهذه الدوال والمتغيرات الموجودة في كائن (متغير) nokia ؟
الجواب هو بإستخدام مايسمى بمعامل الكائن أو الـ Object Operator وهو عبارة عن شكل سهم كالتالي:
->
|
$nokia->color = "blue";
|
$nokia->Connect();
|
والآن لنتحدث قليلاً عن المتغير الداخلي this، ولمعرفة اهميتها دعنا نتأمل المثال التالي، لنفترض مثلاً انه موجود دالة بإسم mail فى لغة PHP، وانت قمت فى الكلاس بتعريف دالة تسمى mail ايضًا، لذلك سيحدث لبس عند إستدعاء تلك الدوال، كذلك الحال مع المتغيرات، فقد يكون فى برنامج متغير بإسم name ويوجد نفس المتغير بنفس الاسم فى الكلاس، ولذلك this تستخدم لتحديد المتغيرات والدوال بداخل الكلاس الخاص بك.
والآن لنتحدث عن الـConstructor، بالنسبة للبرمجة فهي عبارة عن دالة تكون داخل الكلاس وتقوم هذه الدالة بإجراء عمليات التمهيد مثل أن تستخدم الدالة هذه لتمهيد قيم المتغيرات عند بدء التعامل مع الكلاس ... وهي أول دالة يتم إستخدامها عند إنشاء الكائن وهذا ثابت.
أما بالنسبة للسؤال هنا : هو إذا كان الـ Constructor دالة فكيف يتعرف الكلاس على دالة معينة ضمن الدوال الموجودة فيه ؟
حقيقةً يختلف الجواب من php4 و php5 !!
ولكننا فى الوقت الحالي سنكتفي بـPHP4 فقط.
تكون دالة Constructor بنفس إسم الكلاس بالضبط حتى في شكل الحروف أي إذا كانت الحروف مكتوبة في اسم الكلاس بالصغير والكبير فيجب أن يكون إسم الدالة مطابق بالضبط.
الآن تخيل أن لدينا كلاس بإسم Image أي صورة وفي هذا الكلاس ولنفرض متغيرين هما w يمثل عرض الصورة مثلاً ومتغير بإسم h ويمثل الإرتفاع للصورة و هذا الكلاس يحتوي على دالتين بإسم
Image ويمثل الـ Constructor الخاص بالكلاس Image ولاحظ هنا أن هذه الدالة بنفس إسم الكلاس وتستخدم لأي شئ تريد عمله فهي دالة عادية مثلهامثل أي دالة ويمكنك كتابة ماتريده فيها ولكن عرفت على أنها دالة لتمهيد المتغيرات الخاصة بالكلاس وإجراء العمليات التمهيدية ولكن هذه ليست قاعدة ثابتة، Draw لرسم الصورة مثلاً
لذلك سنمهد المتغيرين h,w في الدالة Image وسيكون شكل الكلاس كالتالي :
class Image
{ var $w; var $h; function Image() { $this->w = 0; $this->h = 0; } function Draw() { // do something here } } |
$pattern = new Image();
|
لذلك دائماً دالة الـ Constructor يتم إستدعائها عند إنشاء الكائن فقط.
الآن لو أردنا أن نجعل المستخدم هو من يعين طول وعرض الصورة فإننا نستطيع وضع باراميترين للدالة Image عند التمهيد وسيصبح شكل الكلاس مع الدالة Image كالتالي :
class Image
{ var $w; var $h; function Image($a,$b) { $this->w = $a; $this->h = $b; } function Draw() { // do something here } } |
$pattern = new Image(72,120);
|
بالطبع الـOOP عالم واسع لا نستطيع إدراجه كله فى تلك التدوينة، ولكننا الآن قمنا بتغطية كل الأساسيات التي يحتاجها المبرمج للبدء فى البرمجة عبر الـOOP.
تحياتي لكم.
الدرس من تأليف المبرمج أحمد عصام
من مدونة المبرمج (توقفت في نهاية عام 2013) وتم نقل الدرس لتعم الفائدة