The Constructor أو الباني المحمل الممهد ... !
بالنسبة لهذا الدرس فهو يتحدث عن Constructor و تترجمها الكتب العربية والمواقع العربية بكلمات كثيرة منها الباني . المحمل . الممهد . إلخ ...
لذلك أنا هنا لا أعرف بأي إسم أضعه ... لذلك سأقول المعنى على شكل تعريف ثم أذكر إسم معين لنسير عليه ..
مامعنى Constructor ?
بالنسبة للبرمجة فهي عبارة عن دالة تكون داخل الكلاس وتقوم هذه الدالة بإجراء عمليات التمهيد مثل أن تستخدم الدالة هذه لتمهيد قيم المتغيرات عند بدء التعامل مع الكلاس ... وهي أول دالة يتم إستخدامها عند إنشاء الكائن وهذا ثابت .
أما بالنسبة للسؤال هنا : هو إذا كان الـ Constructor دالة فكيف يتعرف الكلاس على دالة معينة ضمن الدوال الموجودة فيه ؟
يختلف الجواب من php4 و php5 !!
وأنا سأكتفي ببي اتش بي 4 ...!
تكون دالة Constructor بنفس إسم الكلاس بالضبط حتى في شكل الحروف أي إذا كانت الحروف مكتوبة في اسم الكلاس بالصغير والكبير فيجب أن يكون إسم الدالة مطابق بالضبط ...
ويازين التوضيح بمثال ..
الآن تخيل أن لدينا كلاس بإسم Image أي صورة وفي هذا الكلاس ولنفرض متغيرين هما w يمثل عرض الصورة مثلاً ومتغير بإسم h ويمثل الإرتفاع للصورة و هذا الكلاس يحتوي على دالتين بإسم
Image ويمثل الـ Constructor الخاص بالكلاس Image ولاحظ هنا أن هذه الدالة بنفس إسم الكلاس وتستخدم لأي شئ تريد عمله فهي دالة عادية مثلهامثل أي دالة ويمكنك كتابة ماتريده فيها ولكن عرفت على أنها دالة لتمهيد المتغيرات الخاصة بالكلاس وإجراء العمليات التمهيدية ولكن هذه ليست قاعدة ثابتة .
Draw لرسم الصورة مثلاً
لذلك سنمهد المتغيرين h,w في الدالة Image وسيكون شكل الكلاس كالتالي :
كود PHP:
class Image
{
var $w;
var $h;
function Image()
{
$this->w = 0;
$this->h = 0;
}
function Draw()
{
// do something here
}
}
طيب الآن أنشأنا الكلاس هنا ..
الآن نريد إستخدام الكلاس Image ونريد أن ننشئ كائن بإسم pattern لذلك فإننا سنقوم بالتالي :
كود PHP:
$pattern = new Image();
لاحظ الآن عندما أنشأت الكائن فإنك كتبت إسم الكلاس بعد كلمة new ...
في الحقيقة أنت كتبت إسم الكلاس نعم ولكن في حقيقة الأمر أنت تستدعي الدالة Image من ضمن الكلاس Image لذلك المتغير pattern ستكون قيمة h,w فيه هي 0 و 0 .
لذلك دائماً دالة الـ Constructor يتم إستدعائها عند إنشاء الكائن فقط ..
الآن لو أردنا أن نجعل المستخدم هو من يعين طول وعرض الصورة فإننا نستطيع وضع باراميترين للدالة Image عند التمهيد وسيصبح شكل الكلاس مع الدالة Image كالتالي :
كود PHP:
class Image
{
var $w;
var $h;
function Image($a,$b)
{
$this->w = $a;
$this->h = $b;
}
function Draw()
{
// do something here
}
}
ولاحظ أن المتغيرين h,w يتم تحديدهما بالمتغيرين a,b ...
الآن إذا أردت أن تنشئ كائن بإسم pattern كما ذكرنا فإنك ستنشئ الكائن كالتالي :
كود PHP:
$pattern = new Image(72,120);
وأرجوا أن تكون الفكرة قد وصلت من وراء الـ Constructor .. وكان الله من وراء القصد .
والآن بعدما شرحت الأساسيات فالمطلوب هو أن يضع كل شخص ما يريده حول OOP فهناك مواضيع كثيرة جداً جداً حول هذا الموضوع وكل شخص يضع سؤاله حول هذا المفهوم كي يتم الإجابة عليه وشرحه وسأكون في الخدمه بإذن الله تعالى ...
وسنحاول أن نجعل الموضوع يزخر بالفائدة حول هذا المفهوم فأي تساؤلات أو مواضيع جديدة حول OOP ستكون هنا ...
وهذا مالدي الآن فإن أخطأت فمن نفسي والشيطان وإن أصبت فمن الله عز وجل ..
وللبقية حوار ... بإذن الله
أخوكم عبدالله عيد