بسم الله الرحمن الرحيم
السلام عليكم و رحمة الله و بركاته ,, تحدثنا في الدرس السابق عن الأصناف و الكائنات و كيفية انشائهم و التعامل معهم و كيفية التعامل مع الخواص و العمليات التابعة لنفس الصنف ,, و قد قمنا بكتابة صنف يقوم بالعمليات الحسابية الأربعة و قمنا بتطبيق ما سبق من الأفكار على هذا الصنف و بإمكانكم الإطلاع على الدرس الماضي و الدروس السابقة في الدورة عبر الفهرس التالي :
- [دورة php - الدرس الأول] - تحضير البرامج و كتابة اول برنامج
- [دورة php - الدرس الثاني] - المتغيرات و طريقة تعريفها و انواعها و التعامل معها
- [دورة php - الدرس الثالث] - الجزء الأول : الطباعة المدمجة و تنسيق الصفحات لعرضها
- [دورة php - الدرس الرابـع] - الجزء الثاني : طباعة المتغيرات في النصوص و بعض الدوال
- [دورة php - الدرس الخامس] - الثوابت و متغيرات النظام و دوال لا يستغني عنها اي مبرمج
- [دورة php - الدرس السادس] - الجزء الأول : النماذج و كيفية تصميمها و فوائدها
- [دورة php - الدرس السابع] - الجزء الثاني : معالجة بيانات النماذج و برمجتها
- [دورة php - الدرس الثامن] - الجزء الثالث : تطبيق عملي للنماذج - اتصل بن
- [دورة php - الدرس التاسع] - الجزء الأول : الجمل الشرطية : if وانواعها
- [دورة php - الدرس العاشر] - الجزء الثاني : الجمل الشرطية : جملة switch
- [دورة php - الدرس الحادي عشر] - الجزء الأول : جمل التكرار و الدوران : for + while
- [دورة php - الدرس الثاني عشر] - الجزء الثاني : تكملة جمل التكرار و تطبيقات عليها
- [دورة php - الدرس الثالث عشر] - الجزء الأول : المصفوفات الرقمية و تعريفها
- [دورة php - الدرس الرابع عشر] - الجزء الثاني : المصفوفات الحرفية و المركبة و تعريفها
- [دورة php - الدرس الخامس عشر] - الجزء الثالث : دوال المصفوفات
- [دورة php - الدرس السادس عشر] - اعادة استخدام الكود و ادراج الملفات
- [دورة php - الدرس السابع عشر] - انشاء و برمجة الدوال functions
- [دورة php - الدرس الثامن عشر] - مقدمة الى البرمجة الموجهة للكائنات
- [دورة php - الدرس التاسع عشر] - انشاء الأصناف classes و الكائنات objects
و في درس اليوم بإذن الله سوف نتحدث عن موضوعين اساسيين في البرمجة الموجهة للكائنات و هي تعتبر صميم البرمجة الموجهة للكائنات و الموضوع الأول هو دالة بناء الصنف (constructor) و الموضوع الآخر و هو خصوصية الصنف و التحكم بمجال رؤية الصنف ,, و نبدأ على بركة الله ...
دالة بناء الصنف Constructor
دالة بناء الصنف هي دالة مثل باقي دوال التي يتم كتابتها داخل الصنف و لكنها لها مميزات و الميزة الأولى انها تقوم بتنفيذ نفسها تلقائيا بمجرد انشاء كائن من الصنف و الميزة الثانية لها اننا نستطيع اعطاء القيم الإبتدائية لخواص الصنف داخل هذه الدالة الآن سوف نكتب صنف جديد و نرى ما المقصود بهذا الكلام لاحظ المثال التالي :
كود PHP:
<?php
class Car {
var $car_color;
var $car_num;
function Car($name){
echo "car ".$name." running now<br/>";
}
}
$obj1 = new Car("BMW");
$obj2 = new Car("OPEL");
?>
في البداية قمنا بإنشاء صنف اسميناه Car ثم قمنا بتعريف خاصيتين للصنف ثم كتبنا الدالة :
كود PHP:
function Car($name){
echo "car ".$name." running now<br/>";
}
هذه الدالة تابعة للصنف و هي تستقبل مدخل واحد وهو name$ و داخل الدالة يتم طباعة المدخل الذي تم استقباله لكن ما هو الغريب في هذه الدالة ؟؟ ,, لاحظ يا عزيزي ان اسم الدالة هو Car اي بنفس اسم الصنف و هذه هي دالة البناء و يتم تنفيذها بمجرد انشاء كائن من الصنف Car كما سنلاحظ تاليا ,, اذا القاعدة في كتابة دالة البناء هي انها تكون بنفس اسم الصنف وهي حساسة لحالة الأحرف الصغيرة و الكبيرة ,, الآن لاحظ السطرين التاليين :
كود PHP:
$obj1 = new Car("BMW");
$obj2 = new Car("OPEL");
هنا قمنا بإنشاء كائنين من الصنف Car و كل كائن منهم اخذ قيمة كما عرفنا في دالة البناء و هنا عندما تنفذ هذا الكود سوف تلاحظ ان دالة البناء تقوم بتنفيذ نفسها تلقائيا بمجرد انشاء كائن من الصنف Car و ذلك بدون برمجة دالة طباعة قيم و انما دالة البناء هي التي تقوم بطباعة القيم بمجرد انشاء الكائن
و ذكرنا ان دالة البناء تستخدم لإعطاء قيم اولية لخصائص الصنف , فمثلا لو اردنا كتابة صنف لإجراء عملية جمع و ايجاد المعدل لعلامات فإننا بالتأكيد بحاجة الى متغيرات داخل الصنف لتخزين قيمة المجموع و قيمة المعدل و يجب ان تكون قيمهم صفر لكي تكون النتائج صحيحة و نستطيع بتنفيذ هذه العملية من خلال دالة البناء لاحظ المثال التالي :
كود PHP:
<?php
class calculateAvg {
var $sum;
var $avg;
function calculateAvg(){
$this->sum = 0;
$this->avg = 0;
}
function getSum($m1,$m2,$m3){
$this->sum = $m1 + $m2 + $m3;
return $this->sum;
}
function getAvg($s){
$this->avg = $s / 3;
return $this->avg;
}
}
$obj1 = new calculateAvg();
$sumation = $obj1->getSum(70,75,80);
$av = $obj1->getAvg($sumation);
echo "avg =".$av;
?>
في داخل الصنف قمنا بتعريف المتغير sum$ و المتغير avg$ و هذه المتغيرات هي التي ستحمل قيمة مجموع العلامات و المعدل لذلك يجب ان تكون قيمتها الإبتدائية صفر ,, و ثم قمنا بكتابة دالة البناء و في داخلها كتبنا :
كود PHP:
$this->sum = 0;
$this->avg = 0;
و هذا يعني اعطي القيمة صفر للخاصية sum$ و الخاصية avg$ التابعة لهذا الصنف و هذا الكلام يعني قم بتصفير القيم لهذه الخواص بمجرد انشاء كائن من هذا الصنف و باقي العمليات هي عمليات جمع للقيم و ارجاع للكائن و حساب المعدل و ارجاعه للكائن ثم طباعة الناتج ..
الخصوصية و مجال الرؤية للأصناف visibility
من العنوان يتضح لنا انه عبارة عن مبدأ من مبادئ البرمجة الموجهة للكائنات ,, فعلى سبيل المثال انا و المسجل في الجامعة ليس لدينا نفس الصلاحيات في نظام الجامعة الإلكتروني فأنا ليس مصرح لي إلا برؤية علاماتي فقط لكن المسجل بإمكانه رؤية علامات جميع الطلاب و هكذا ,,,
قبل الدخول في مبدأ الخصوصية يجب ان نذكر ان لغة ال php لها عدة اصدارات و منها PHP3 و PHP4 و PHP5 و قريبا PHP6 و في كل اصدار من اصدارات هذه اللغة كانت هناك تعديلات و تحسينات , وهنا اريد ان اذكركم بأنني قلت لكم في الدرس السابق اننا عند تعريف خصائص الصنف يجب ان تكتب كلمة var و عند تعريف عملية خاصة للصنف فإننا نكتب كلمة function قبل اسم العملية ,, و هذه الأمور تعمل تماما مع الإصدار PHP4 لكن الآن اتى الإصدار PHP5 و قد اصبح هناك تحديثات على هذه الأمور و اصبح لدينا مبدأ الخصوصية ليكتمل مبدأ البرمجة الموجهة للكائنات من خلال ال (public , private , protected) و التي سنتعرف عليها الآن ...
هناك 3 مستويات للتحكم بحماية الصنف او الوصول لبيانات الصنف و هي المستوى العام public و في هذا المستوى اذا كانت الخصائص و الدوال معرفة على انها عامة فإن كل الكائنات من هذا الصنف تستطيع الوصول لبيانات هذه الخصائص و التعديل عليها و التحكم بالدوال , و المستوى الثاني و هو ال private و هو المستوى الخاص و هنا لا يستطيع اي كائن من الصنف ان يصل لبيانات الصنف من خارج الصنف و استعمال هذه البيانات المعرفة على انها private مقتصر على الدوال المعرفة داخل الصنف و المستوى الثالث و هو المستوى المحمي protected و هو نوع خاص يستخدم بالحماية عند استخدام الوراثة في الأصناف و سنتحدث عنه في الدرس القادم ...
الكلام مبهم نوعا ما لكن لاحظ معي المثال التالي لكي تفهم المقصود من كلامي :
كود PHP:
<?php
class security {
public $x;
public function edit_value($y){
$this->x = $y;
}
}
$obj = new security;
$obj->x = 6;
echo $obj->x;
?>
لاحظ ان هذا الصنف بسيط لكن لاحظ اننا قمنا بالإستغناء عن الكلمة var و استبدالها بالكلمة public و هنا نعني ان القيمة x تستطيع الكائنات الوصول اليها مباشرة و التعديل على قيمتها كما تلاحظ في السطرين الأخيرين فقد قمنا بإعطاء قيمة الخاصية x و تساوي 6 ثم قمنا بطباعة قيمة الكائن و لاحظ ايضا اننا نستطيع كتابة الكلمة public قبل اسماء الدوال لكي نجعل الكائنات التي خارج الصنف بالوصل الى بياناتها و استخدامها
الآن سنغير الكلمة public في المثال السابق الى private لكي يصبح الكود كالتالي :
كود PHP:
<?php
class security {
private $x;
public function edit_value($y){
$this->x = $y;
}
}
$obj = new security;
$obj->x = 6;
echo $obj->x;
?>
تلاحظ ان المتغير x اصبح private و هذا يعني ان الكائنات التي خارج الصنف لا تستطيع الإستخدام المباشر لهذه الخاصية و استخدامها مقتصر على الدوال التي بداخل الصنف لأنها خاصة داخل الصنف فقط و لا يستطيع اي كائن استخدامها مباشرة لذلك قم بتنفيذ الكود السابق و سوف ترى انه لن يطبع اي قيمة لأن الكائن obj$ لا يستطيع التعديل على قيمة الخاصية x$ لأنها معرفة private و لكن يستطيع التعديل على القيمة بطريقة غير مباشرة و هي استخدام دالة من دوال الصنف للتعديل لأن الدوال التي بداخل الصنف لديها الصلاحيات بتعديل قيم ال private لأنها على مستوى الصنف فقط و هذا الكلام ايضا على الدوال داخل الصنف فأي دالة من الممكن ان تكون public و نستطيع الوصول لها و استخدامها من خارج الصنف او ان تكون private و في هذه الحالة لا نستطيع الوصول لها و استخدامها من خارج الصنف و استخدامها يكون فقط من قبل الدوال الأخرى داخل الصنف
قبل ان انهي الدرس ان اذكر بأن دالة البناء هي دالة من نوع خاص و يجب في تعريفها ان تكون public لأنها تنفذ تلقائيا عند انشاء الكائن و اننا كتبناها private فإن برنامجنا سيتعطل بالكامل
الى هنا احبتي اصل معكم الى نهاية درس اليوم و سنتحدث في الدرس القادم عن التعامل مع الملفات في php و كيفية تخزينها و الكتابة عليها و انشائها و القرائة منها ثم سنعود الى البرمجة الموجهة للكائنات و الأصناف
و لكم مني اجمل تحية
اخوكم : زيد مراد
مواقع النشر (المفضلة)