المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : [دورة php - الدرس العشرون] - دالة بناء الصنف و مستويات الخصوصية



Sc®ipt
02-02-2011, 03:19 AM
بسم الله الرحمن الرحيم

http://upload.wikimedia.org/wikipedia/ar/thumb/8/85/%D8%B4%D8%B9%D8%A7%D8%B1_PHP.png/200px-%D8%B4%D8%B9%D8%A7%D8%B1_PHP.png

السلام عليكم و رحمة الله و بركاته ,, تحدثنا في الدرس السابق عن الأصناف و الكائنات و كيفية انشائهم و التعامل معهم و كيفية التعامل مع الخواص و العمليات التابعة لنفس الصنف ,, و قد قمنا بكتابة صنف يقوم بالعمليات الحسابية الأربعة و قمنا بتطبيق ما سبق من الأفكار على هذا الصنف و بإمكانكم الإطلاع على الدرس الماضي و الدروس السابقة في الدورة عبر الفهرس التالي :









[دورة php - الدرس الأول] - تحضير البرامج و كتابة اول برنامج (http://al79n.com/vb/showthread.php?t=60153)
[دورة php - الدرس الثاني] - المتغيرات و طريقة تعريفها و انواعها و التعامل معها (http://al79n.com/vb/showthread.php?t=60224)
[دورة php - الدرس الثالث] - الجزء الأول : الطباعة المدمجة و تنسيق الصفحات لعرضها (http://al79n.com/vb/showthread.php?t=60243)
[دورة php - الدرس الرابـع] - الجزء الثاني : طباعة المتغيرات في النصوص و بعض الدوال (http://al79n.com/vb/showthread.php?t=60264)
[دورة php - الدرس الخامس] - الثوابت و متغيرات النظام و دوال لا يستغني عنها اي مبرمج (http://al79n.com/vb/showthread.php?t=60306)
[دورة php - الدرس السادس] - الجزء الأول : النماذج و كيفية تصميمها و فوائدها (http://al79n.com/vb/showthread.php?t=60500)
[دورة php - الدرس السابع] - الجزء الثاني : معالجة بيانات النماذج و برمجتها (http://www.al79n.com/vb/showthread.php?t=60629)
[دورة php - الدرس الثامن] - الجزء الثالث : تطبيق عملي للنماذج - اتصل بن (http://www.al79n.com/vb/showthread.php?t=60739)
[دورة php - الدرس التاسع] - الجزء الأول : الجمل الشرطية : if وانواعها (http://www.al79n.com/vb/showthread.php?t=60763)
[دورة php - الدرس العاشر] - الجزء الثاني : الجمل الشرطية : جملة switch (http://www.al79n.com/vb/showthread.php?t=60792)
[دورة php - الدرس الحادي عشر] - الجزء الأول : جمل التكرار و الدوران : for + while (http://www.al79n.com/vb/showthread.php?t=60922)
[دورة php - الدرس الثاني عشر] - الجزء الثاني : تكملة جمل التكرار و تطبيقات عليها (http://www.al79n.com/vb/showthread.php?t=61245)
[دورة php - الدرس الثالث عشر] - الجزء الأول : المصفوفات الرقمية و تعريفها (http://www.al79n.com/vb/showthread.php?t=62112)
[دورة php - الدرس الرابع عشر] - الجزء الثاني : المصفوفات الحرفية و المركبة و تعريفها (http://www.al79n.com/vb/showthread.php?t=64223)
[دورة php - الدرس الخامس عشر] - الجزء الثالث : دوال المصفوفات (http://www.al79n.com/vb/showthread.php?t=64324)
[دورة php - الدرس السادس عشر] - اعادة استخدام الكود و ادراج الملفات (http://www.al79n.com/vb/showthread.php?t=64366)
[دورة php - الدرس السابع عشر] - انشاء و برمجة الدوال functions (http://www.al79n.com/vb/showthread.php?t=64389)
[دورة php - الدرس الثامن عشر] - مقدمة الى البرمجة الموجهة للكائنات (http://www.al79n.com/vb/showthread.php?t=64454)
[دورة php - الدرس التاسع عشر] - انشاء الأصناف classes و الكائنات objects (http://www.al79n.com/vb/showthread.php?t=64462)








و في درس اليوم بإذن الله سوف نتحدث عن موضوعين اساسيين في البرمجة الموجهة للكائنات و هي تعتبر صميم البرمجة الموجهة للكائنات و الموضوع الأول هو دالة بناء الصنف (constructor) و الموضوع الآخر و هو خصوصية الصنف و التحكم بمجال رؤية الصنف ,, و نبدأ على بركة الله ...

دالة بناء الصنف Constructor

دالة بناء الصنف هي دالة مثل باقي دوال التي يتم كتابتها داخل الصنف و لكنها لها مميزات و الميزة الأولى انها تقوم بتنفيذ نفسها تلقائيا بمجرد انشاء كائن من الصنف و الميزة الثانية لها اننا نستطيع اعطاء القيم الإبتدائية لخواص الصنف داخل هذه الدالة الآن سوف نكتب صنف جديد و نرى ما المقصود بهذا الكلام لاحظ المثال التالي :


<?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 ثم قمنا بتعريف خاصيتين للصنف ثم كتبنا الدالة :


function Car($name){
echo "car ".$name." running now<br/>";
}

هذه الدالة تابعة للصنف و هي تستقبل مدخل واحد وهو name$ و داخل الدالة يتم طباعة المدخل الذي تم استقباله لكن ما هو الغريب في هذه الدالة ؟؟ ,, لاحظ يا عزيزي ان اسم الدالة هو Car اي بنفس اسم الصنف و هذه هي دالة البناء و يتم تنفيذها بمجرد انشاء كائن من الصنف Car كما سنلاحظ تاليا ,, اذا القاعدة في كتابة دالة البناء هي انها تكون بنفس اسم الصنف وهي حساسة لحالة الأحرف الصغيرة و الكبيرة ,, الآن لاحظ السطرين التاليين :


$obj1 = new Car("BMW");

$obj2 = new Car("OPEL");

هنا قمنا بإنشاء كائنين من الصنف Car و كل كائن منهم اخذ قيمة كما عرفنا في دالة البناء و هنا عندما تنفذ هذا الكود سوف تلاحظ ان دالة البناء تقوم بتنفيذ نفسها تلقائيا بمجرد انشاء كائن من الصنف Car و ذلك بدون برمجة دالة طباعة قيم و انما دالة البناء هي التي تقوم بطباعة القيم بمجرد انشاء الكائن

و ذكرنا ان دالة البناء تستخدم لإعطاء قيم اولية لخصائص الصنف , فمثلا لو اردنا كتابة صنف لإجراء عملية جمع و ايجاد المعدل لعلامات فإننا بالتأكيد بحاجة الى متغيرات داخل الصنف لتخزين قيمة المجموع و قيمة المعدل و يجب ان تكون قيمهم صفر لكي تكون النتائج صحيحة و نستطيع بتنفيذ هذه العملية من خلال دالة البناء لاحظ المثال التالي :


<?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$ و هذه المتغيرات هي التي ستحمل قيمة مجموع العلامات و المعدل لذلك يجب ان تكون قيمتها الإبتدائية صفر ,, و ثم قمنا بكتابة دالة البناء و في داخلها كتبنا :


$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
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
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 و كيفية تخزينها و الكتابة عليها و انشائها و القرائة منها ثم سنعود الى البرمجة الموجهة للكائنات و الأصناف
و لكم مني اجمل تحية

اخوكم : زيد مراد

وسام المصري
02-02-2011, 10:44 AM
يسلمووووووووووووووووووووووووو

Sc®ipt
02-09-2011, 10:54 AM
يسلمووووووووووووووووووووووووو

العفو صديقي :) ..

kin
02-13-2011, 08:44 PM
:36_3_13[1]::36_3_13[1]::36_3_13[1]:فعلن يسلموووووووووو:36_3_13[1]::36_3_13[1]::36_3_13[1]:

kin
02-13-2011, 08:45 PM
وين مافي حد بدو يرددددددددددددد:36_10_2[1]::36_3_13[1]::7_5_138[1]::too_upset::110104_emM7_prv::si (25)::110104_emM8_prv:

Sc®ipt
02-14-2011, 09:59 PM
العفو صديقي Kin بس صدقا ما انتبهت إلا هسه ,, و اهلا و سهلا فيك ...