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

مشاهدة النسخة كاملة : [دورة php - الدرس التاسع عشر] - انشاء الأصناف classes و الكائنات objects



Sc®ipt
01-31-2011, 02:14 PM
بسم الله الرحمن الرحيم

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)








واليوم سوف نتحدث بتفصيل عن الأصناف classes و الكائنات objects و كيفية انشائهم و التعامل معهم و سنتعرف على الخصائص attribute و الوظائف او العمليات للأصناف proprieties or operations الخاصة بالصنف و نبدأ على بركة الله ,,,

انشاء الأصناف :

كما ذكرنا سابقا الصنف هو عبارة عن وحدة برمجية متكاملة (تخيلها علبة) لها خصائص و عمليات خاصة بها و الآن لنتعرف على الصيغة العامة لكتابة الصنف في لغة php من خلال المثال التالي :


<?php
class className
{
// attribute
var $attribute1;
var $attribute2;

// operation or called methods
function method1($parameter){

}
function method2(){

}
}
?>

كما تلاحظ اننا كتبنا الكلمة class و هي كلمة محجوزة في اساسيات اللغة تدلنا على اننا سنبدأ بتعريف صنف جديد و من ثم يتبعها className و هو اسم الصنف و اسم الصنف يتبع لقواعد تسمية الدوال كما في الدروس السابقة و من ثم فتحنا الأقواس {} و كتبنا بداخلها محتويات الصنف ,, محتويات الصنف بأبسط صورة هي عبارة عن برنامج متكامل يعبر عن عمل الصنف من خلال الخصائص و الوظائف ,, و الخصائص في الأصناف دائما هي متغيرات يتم تعريفها داخل الصنف كما بتعريف المتغيرات في الدروس السابقة لكن الفرق هنا اننا يجب ان نكتب كلمة var قبل اسم المتغير او الخاصية لاحظ السطرين :

// attribute
var $attribute1;
var $attribute2;
تلاحظ اننا عبرنا عن اسماء الخصائص للصنف بمتغيرات عادية لكن سبقنا اسم المتغير بالكلمة var لأنها ضرورية في بعض اصدارات لغة php

اما الوظائف و العمليات للصنف فقد عبرنا عنها بدوال عادية كما درسنا في الدروس السابقة ومنها في مثالنا الدالة method1 و method2 هنا يجب ان تعلم يا عزيزي ان المبدأ اننا نعرف خصائص للصنف و ثم نقوم بتعريف وظائف تتحكم بهذه الخصائص من خلال الدوال ,,

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


<?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 للصنف و هي :

// attribute
var $number1;
var $number2;
var $result;

و هذه الخصائص سوف نتحكم بها من خلال الوظائف

ثم بدأنا بتعريف الوظائف و كانت الوظيفة الأولى هي :


function sum($num1,$num2){
$this->number1 = $num1;
$this->number2 = $num2;
$this->result = $this->number1 + $this->number2;
return $this->result;
}

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

$this->number1 = $num1;

هذه الجملة تعني اجعل المتغير num1 الذي قمت بإستقباله كمدخل للدالة يتخزن في الخاصية number1 الخاصة بهذا الصنف و هنا تلاحظ اننا استخدمنا this$ و هو متغير من نوع خاص يدل على ان الذي بعده هو عبارة عن خاصية من خصائص الصنف فعندما نكتب :

$this->number1;

او


$this->number2;

او


$this->result;

فهذا يعني ان هذه المتغيرات number1 و number2 و result هي خصائص للصنف و ليست متغيرات خارج الصنف
ايضا يجب ان تلاحظ هنا اننا نتكتب للدلالة على الخاصية المتغير this$ ثم يتبعه الإشارة <- ثم يتبعه اسم الخاصية المعرفة في بداية الصنف مثل number1 او number2 او result لكن بدون الإشارة $

نعود للوظيفة sum قمنا بإستقبال المدخلين ثم قمنا بتخزينهم في خصائص الصنف ثم اجرينا عليهم عملية الجمع و قمنا بتخزين الناتج في الخاصية result ثم قمنا بإرجاع قيمة ال result بإستخدام الكلمة return

و تنطبق نفس العملية على باقي الوظائف داخل هذا الصنف و هي sub الخاصة بالطرح و mul الوظيفة الخاصة بالضرب و div الوظيفة الخاصة بالقسمة

الآن بعد الإنتهاء من كتابة الكلاس ستجد اننا قمنا بكتابة التالي :


$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/>";

تلاحظ اننا كتبنا في السطر الأول :

$obj = new calculator;
و هذه تعني انشأ كائن جديد من الصنف calculator لاحظ ان الصيغة هي كتابة اسم متغير الكائن و انا اسميته obj$ اي اختصار object ثم اشارة المساواه = ثم الكلمة المحجوزة new ثم اسم الصنف ثم فاصلة منقوطة

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

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

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

$res = sum(5,5);
echo $res."<br/>";
سوف ينتج لدينا خطأ لأن الدالة sum غير معرفة في البرنامج ككل لكنها معرفة داخل الصنف calculator اي اننا نحتاج الى كائن من هذا الصنف لإتمام العملية بنجاح فالطريقة الصحيحة هي الإستدعاء بإستخدام الكائن obj$ كالتالي :

$res = $obj->sum(5,5);
echo $res."<br/>";
لاحظ هنا اننا قمنا بكتابة اسم الكائن و هو obj$ ثم الإشارة <- ثم اسم الدالة او الوظيفة الخاصة بالصنف و هذه هي طريقة استدعاء الوظائف و الخصائص بإستخدام الكائن

و باقي العمليات على الوظائف الخاصة على صنف مشابه لعملية الجمع و بإمكانكم مشاهدة ناتج تنفيذ هذا الصنف من خلال الرابط التالي :
http://www.al79n-php.info/less19/class.php

بهذا اخواني اخواتي الكرام اكون قد وصلت معكم الى نهاية درس اليوم و الى لقاء اخر في الدرس القادم لكم مني اجمل تحية

اخوكم : زيد مراد :SnipeR (50):

صديقه بنت الشديفات
01-31-2011, 06:00 PM
اول شي يعطيك العافيه
ممكن سؤال؟؟
$this->number2;
في مجال انو ما نكتبها داخل الجواب
function sum(number1,number2){

2result = number1 + number*

return result;

هيك يزبط ولا لا

Sc®ipt
02-01-2011, 12:44 AM
اهلاا صديقة بنت شديفات

طبعا بصير لكن اذا عملنا هيك بنكون اهملنا كل مبادئ البرمجة الموجهة للكائنات لأنه انتي بهاي الحالة بتكوني استغنيتي عن استخدام الخصائص للصنف و احنا بنستخدم المتغير this عشان نحقق الوصول لخصائص الكلاس ... و تحياتي لك

ملاحظة : اسماء المتغيرات انتي بتكتبيها خطأ ,, يجب ان يبدأ اسم المتغير بالرمز $

صديقه بنت الشديفات
02-02-2011, 02:46 PM
يسلمو زيد ومشكور على جهودك
ان شاء الله بميزان حسناتك

Sc®ipt
02-03-2011, 12:37 AM
تسلمي يا صديقة و منورة :)

في البال اغنيه
02-21-2011, 01:47 AM
شكركم كتير علي هل المجهود يلي عملتواا وانشاء الله منقدر نفيد ونستفيد :eh_s(15):

Sc®ipt
02-21-2011, 11:58 PM
شكركم كتير علي هل المجهود يلي عملتواا وانشاء الله منقدر نفيد ونستفيد :eh_s(15):

العفو و شكرا لمرورك