[دورة php - الدرس التاسع عشر] - انشاء الأصناف classes و الكائنات objects
بسم الله الرحمن الرحيم
http://upload.wikimedia.org/wikipedi...%D8%B1_PHP.png
السلام عليكم و رحمة الله و بركاته , تحدثنا في الدرس السابق عن مقدمة للبرمجة الموجهة للكائنات و القينا نظرة سريعة على اهم مبادئ هذا النوع من البرمجة حيث تكلمنا عن الأصناف و الكائنات و مبدأ الوراثة و التعددية و ذكرنا امثلة من الواقع التي تحاكيها برمجة الكائنات و بإمكانكم الإطلاع على الدرس السابق و باقي دروس الدورة من خلال الفهرس التالي :
واليوم سوف نتحدث بتفصيل عن الأصناف classes و الكائنات objects و كيفية انشائهم و التعامل معهم و سنتعرف على الخصائص attribute و الوظائف او العمليات للأصناف proprieties or operations الخاصة بالصنف و نبدأ على بركة الله ,,,
انشاء الأصناف :
كما ذكرنا سابقا الصنف هو عبارة عن وحدة برمجية متكاملة (تخيلها علبة) لها خصائص و عمليات خاصة بها و الآن لنتعرف على الصيغة العامة لكتابة الصنف في لغة php من خلال المثال التالي :
كود PHP:
<?php
class className
{
// attribute
var $attribute1;
var $attribute2;
// operation or called methods
function method1($parameter){
}
function method2(){
}
}
?>
كما تلاحظ اننا كتبنا الكلمة class و هي كلمة محجوزة في اساسيات اللغة تدلنا على اننا سنبدأ بتعريف صنف جديد و من ثم يتبعها className و هو اسم الصنف و اسم الصنف يتبع لقواعد تسمية الدوال كما في الدروس السابقة و من ثم فتحنا الأقواس {} و كتبنا بداخلها محتويات الصنف ,, محتويات الصنف بأبسط صورة هي عبارة عن برنامج متكامل يعبر عن عمل الصنف من خلال الخصائص و الوظائف ,, و الخصائص في الأصناف دائما هي متغيرات يتم تعريفها داخل الصنف كما بتعريف المتغيرات في الدروس السابقة لكن الفرق هنا اننا يجب ان نكتب كلمة var قبل اسم المتغير او الخاصية لاحظ السطرين :
كود PHP:
// attribute
var $attribute1;
var $attribute2;
تلاحظ اننا عبرنا عن اسماء الخصائص للصنف بمتغيرات عادية لكن سبقنا اسم المتغير بالكلمة var لأنها ضرورية في بعض اصدارات لغة php
اما الوظائف و العمليات للصنف فقد عبرنا عنها بدوال عادية كما درسنا في الدروس السابقة ومنها في مثالنا الدالة method1 و method2 هنا يجب ان تعلم يا عزيزي ان المبدأ اننا نعرف خصائص للصنف و ثم نقوم بتعريف وظائف تتحكم بهذه الخصائص من خلال الدوال ,,
الآن سنقوم بإنشاء صنف اسمه calculator و من خصائصه ان له رقمين و نتيجة و لديه وظائف و هي الجمع و الطرح و الضرب و القسمة لاحظ المثال و ثم الشرح :
كود PHP:
<?php
class calculator
{
// attribute
var $number1;
var $number2;
var $result;
// operation or called methods
function sum($num1,$num2){
$this->number1 = $num1;
$this->number2 = $num2;
$this->result = $this->number1 + $this->number2;
return $this->result;
}
function sub($num1,$num2){
$this->number1 = $num1;
$this->number2 = $num2;
$this->result = $this->number1 - $this->number2;
return $this->result;
}
function mul($num1,$num2){
$this->number1 = $num1;
$this->number2 = $num2;
$this->result = $this->number1 * $this->number2;
return $this->result;
}
function div($num1,$num2){
$this->number1 = $num1;
$this->number2 = $num2;
if($this->number2 != 0){
$this->result = $this->number1 / $this->number2;
return $this->result;
}
else{
echo "cannot divide by zero";
}
}
}
$obj = new calculator;
// call sum method
$res = $obj->sum(5,5);
echo $res."<br/>";
// call sub method
$res = $obj->sub(5,5);
echo $res."<br/>";
// call mul method
$res = $obj->mul(5,5);
echo $res."<br/>";
// call div method
$res = $obj->div(5,2);
echo $res."<br/>";
?>
لقد بدأنا بإنشاء صنف من خلال الكلمة المحجوزة class ثم اسمينا الصنف و calculator و بدأنا بكتابة محتويات الصنف
بدأنا محتويات الصنف بتعريف 3 خصائص attribute للصنف و هي :
كود PHP:
// attribute
var $number1;
var $number2;
var $result;
و هذه الخصائص سوف نتحكم بها من خلال الوظائف
ثم بدأنا بتعريف الوظائف و كانت الوظيفة الأولى هي :
كود PHP:
function sum($num1,$num2){
$this->number1 = $num1;
$this->number2 = $num2;
$this->result = $this->number1 + $this->number2;
return $this->result;
}
و هذه الوظيفة كما تلاحظ هي عبارة عن دالة و لكن هذه الدالة موجودة داخل الصنف اي انها خاصة بالصنف نفسه و تستخدم للتحكم بخصائص الصنف و هذه الدالة كما تلاحظ تقوم بإستقبال مدخلين num1 و num2 و داخل الدالة قمنا بعملية جمع لكن سوف تلاحظ ان هناك شيء غريب في هذه الدالة و هو جمل مشابهة للتالي :
كود PHP:
$this->number1 = $num1;
هذه الجملة تعني اجعل المتغير num1 الذي قمت بإستقباله كمدخل للدالة يتخزن في الخاصية number1 الخاصة بهذا الصنف و هنا تلاحظ اننا استخدمنا this$ و هو متغير من نوع خاص يدل على ان الذي بعده هو عبارة عن خاصية من خصائص الصنف فعندما نكتب :
او
او
فهذا يعني ان هذه المتغيرات number1 و number2 و result هي خصائص للصنف و ليست متغيرات خارج الصنف
ايضا يجب ان تلاحظ هنا اننا نتكتب للدلالة على الخاصية المتغير this$ ثم يتبعه الإشارة <- ثم يتبعه اسم الخاصية المعرفة في بداية الصنف مثل number1 او number2 او result لكن بدون الإشارة $
نعود للوظيفة sum قمنا بإستقبال المدخلين ثم قمنا بتخزينهم في خصائص الصنف ثم اجرينا عليهم عملية الجمع و قمنا بتخزين الناتج في الخاصية result ثم قمنا بإرجاع قيمة ال result بإستخدام الكلمة return
و تنطبق نفس العملية على باقي الوظائف داخل هذا الصنف و هي sub الخاصة بالطرح و mul الوظيفة الخاصة بالضرب و div الوظيفة الخاصة بالقسمة
الآن بعد الإنتهاء من كتابة الكلاس ستجد اننا قمنا بكتابة التالي :
كود PHP:
$obj = new calculator;
// call sum method
$res = $obj->sum(5,5);
echo $res."<br/>";
// call sub method
$res = $obj->sub(5,5);
echo $res."<br/>";
// call mul method
$res = $obj->mul(5,5);
echo $res."<br/>";
// call div method
$res = $obj->div(5,2);
echo $res."<br/>";
تلاحظ اننا كتبنا في السطر الأول :
كود PHP:
$obj = new calculator;
و هذه تعني انشأ كائن جديد من الصنف calculator لاحظ ان الصيغة هي كتابة اسم متغير الكائن و انا اسميته obj$ اي اختصار object ثم اشارة المساواه = ثم الكلمة المحجوزة new ثم اسم الصنف ثم فاصلة منقوطة
عند كتابتنا هذه الجملة فإننا نقول اصنع لي نسخة تحتوي كل خصائص الصنف calculator و يجب ان تعلم هنا اننا نستطيع تعريف و صنع عدد لا نهائي من الكائنات و كل كائن سيكون له بياناته الخاصة لكن كل الكائنات لها نفس الخصائص و الوظائف لكنها تختلف في البيانات فقط
الآن بعد ان قمنا بإنشاء كائن نستطيع التعامل مع الوظائف و التحكم بالخصائص الخاصة بالصنف الذي يتبع له هذا الكائن
فمثلا اذا اردنا ان نجمع رقم رقمين بإستخدام خصائص و وظائف الصنف calculator فإننا لا نستطيع ذلك إلا بإستخدام كائن من هذا الصنف فلو حاولنا كتابة التالي مثلا :
كود PHP:
$res = sum(5,5);
echo $res."<br/>";
سوف ينتج لدينا خطأ لأن الدالة sum غير معرفة في البرنامج ككل لكنها معرفة داخل الصنف calculator اي اننا نحتاج الى كائن من هذا الصنف لإتمام العملية بنجاح فالطريقة الصحيحة هي الإستدعاء بإستخدام الكائن obj$ كالتالي :
كود PHP:
$res = $obj->sum(5,5);
echo $res."<br/>";
لاحظ هنا اننا قمنا بكتابة اسم الكائن و هو obj$ ثم الإشارة <- ثم اسم الدالة او الوظيفة الخاصة بالصنف و هذه هي طريقة استدعاء الوظائف و الخصائص بإستخدام الكائن
و باقي العمليات على الوظائف الخاصة على صنف مشابه لعملية الجمع و بإمكانكم مشاهدة ناتج تنفيذ هذا الصنف من خلال الرابط التالي :
http://www.al79n-php.info/less19/class.php
بهذا اخواني اخواتي الكرام اكون قد وصلت معكم الى نهاية درس اليوم و الى لقاء اخر في الدرس القادم لكم مني اجمل تحية
اخوكم : زيد مراد :SnipeR (50):
رد: [دورة php - الدرس التاسع عشر] - انشاء الأصناف classes و الكائنات objects
اول شي يعطيك العافيه
ممكن سؤال؟؟
$this->number2;
في مجال انو ما نكتبها داخل الجواب
function sum(number1,number2){
2result = number1 + number*
return result;
هيك يزبط ولا لا
رد: [دورة php - الدرس التاسع عشر] - انشاء الأصناف classes و الكائنات objects
اهلاا صديقة بنت شديفات
طبعا بصير لكن اذا عملنا هيك بنكون اهملنا كل مبادئ البرمجة الموجهة للكائنات لأنه انتي بهاي الحالة بتكوني استغنيتي عن استخدام الخصائص للصنف و احنا بنستخدم المتغير this عشان نحقق الوصول لخصائص الكلاس ... و تحياتي لك
ملاحظة : اسماء المتغيرات انتي بتكتبيها خطأ ,, يجب ان يبدأ اسم المتغير بالرمز $
رد: [دورة php - الدرس التاسع عشر] - انشاء الأصناف classes و الكائنات objects
يسلمو زيد ومشكور على جهودك
ان شاء الله بميزان حسناتك
رد: [دورة php - الدرس التاسع عشر] - انشاء الأصناف classes و الكائنات objects
تسلمي يا صديقة و منورة :)
رد: [دورة php - الدرس التاسع عشر] - انشاء الأصناف classes و الكائنات objects
شكركم كتير علي هل المجهود يلي عملتواا وانشاء الله منقدر نفيد ونستفيد :eh_s(15):
رد: [دورة php - الدرس التاسع عشر] - انشاء الأصناف classes و الكائنات objects
اقتباس:
المشاركة الأصلية كتبت بواسطة في البال اغنيه
شكركم كتير علي هل المجهود يلي عملتواا وانشاء الله منقدر نفيد ونستفيد :eh_s(15):
العفو و شكرا لمرورك