Nwahy Articles V3 pro

البرمجة كائنيه التوجيه في الإصدار php5

البرمجة كائنيه التوجيه في الإصدار php5

القسم php - الزيارات 12465 - التاريخ 15/7/2008 - الكاتب حازم علي
بسم الله الرحمن الرحيم



سأقوم بسرد ما نحتاجه في هذه المقالة في عناوين و من ثم شرحها كلٍٍ علي حدى


محتويات المقالة :-


1- ما هو الكائن

2- إنشاء الكائن

3- تحديد الخواص

4- تحديد الأفعال

&-استخدام الافعال و الخواص
&- استخدام الكائن

5- الوراثة

6- الدالة construct و destruct

7- نسخ الكائن

8- تجريد الكائن

9- الكلمات ألمفتاحيه private, public, protected

10- الثوابت

11- نظره شامله علي الكائن

12- أمثله علي البرمجة ألكائنيه

-------------------------------------------------

1- ما هو الكائن :



بدأت php استخدام البرمجة الموجهة لكائن و المعروفة في معظم لغات البرمجة Object Oriented Program(OOp ) بداية من PHP4 ثم تطورت في PHP5 مما أدى إلي سرعة كتابه الاسكربتات و إضافة خواص جديدة إلى هذه الأسكربتات منها زيادة الاستفادة من المحرك Zend

و التي أدت إلي زيادة سرعة تشغيل الاسكربت الذي يحتوي علي كائن عن ما كان عليه في الإصدار php4

& الكائن ببساطه :
الكائن بكل بساطه هو كل ما هو موجود في هذا الوجود علي سبيل المثال الإنسان

ما الذي نلاحظه في الإنسان بشكل عام دون الخوض في تفاصيل الإنسان جسمه يتكون من رأس

و رجلان و ذراعان جيد الانسان يمتلك ذراعان لذلك هو يستطيع استخدمها في حياته

مثلاً نستخدم الزراع في حمل الأشياء الان استطعنا ربط تكوين الإنسان بأفعاله

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

الخلاصه الكائن يتكون من خواص و الأفعال لنكبر المثال أكثر



لدينا قاعدة بيانات و نريد عمل كائن تكون مهمته هي الاتصال بهذه القاعدة و جلب المعلومات منها

إذاً سنحتاج تحديد خواص لهذا الكائن تجعله مناسب لهذه المهمة

مثلاً نجعله قادر علي الاحتفاظ بما يجلبه من قاعدة البيانات في مصفوفة حتى نستطيع فيما بعد التحكم في هذه البيانات جميل جداً

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

كل هذه الأشياء سنتناولها بشكل مٌفصل فيما بعد فلا تقلق بشأنها.



2- إنشاء الكائن:



كل ما عليك لإنشاء الكائن استخدام هذه الجمله

<?
Class اسم الكائن 
  

  
//محتويات الكائن كخواصه و أفعاله 
  
}
?>


3- تحديد خواص الكائن




كما تكلمنا سابقاً عن الخواص التي يجب تحديدها للكائن حتي يستطيع ان يعتمد عليها في افعاله

في الكائنات يتم تحديد الخواص من خلال وضعها في متغيرات عن طريق الكلمة المفتاحيه

var


مثال :

<?
class TV // قمنا بعمل كائن بأسم TV 
  

  
  
  
var 
اسم الخاصيه 
  
}
?>



<?
class TV // قمنا بعمل كائن بأسم TV 
  


var 
$tardod12036// قمنا  بإنشاء متغير كخصيه يحمل الرقم  
  
// 12036 بشكل  إفتراضي 
  
}
?>



ملحوظه ما يساويه المتغير يكون هو قيمة المتغير الافتراضيه يعني يمكن تغيرها فيما بعد


مثال اخر


<?
class TV // قمنا بعمل كائن بأسم TV 
  

  
var 
$tardod= array(); // قمنا  بإنشاء متغير  يحمل مصفوفه خاليه 
  
}
?>



3- تحديد افعال الكائن

افعال الكائن هي الوظائف التي يقوم بها و معنى كلمة وظيفة في الانجليزيه هي Function

هي نفس الطريقة المستخدمه في صنع وظائف أو افعال الكائن أو الفئه الخاصه به class

قد تسأل نفسك لماذا نستخدمها في الكائن و من الممكن استخدمها بشكل مباشر دون هذه التعقيدات طبعاً يوجد فرق كبير جداً و هي ان الدوال في الكائن أو الوظائف تتيح لك ربطها بالخصائص و كذلك ربط الوظائف مع بعضها و ايضاً كل كائن يحمل وظائف يعبر عن جزء من البرنامج بمفرده علي عكس الدوال لوحدها

مثال

<?
class TV  
  

  

function 
اسم الوظيفه () 


// محتوايات الوظيفه 


  
}
?>



مثال

<?
class TV  
  

  

function  
print_msg ($message


print 
"<div>$message</div>"


  
}
?>


&-استخدام الافعال و الخواص

بعد ما عرفنا كيف نقوم بتحديد افعال و خصائص الكائن سنحتاج لربطهم ببعض

عن طريق الكلمة

$this->


مثال

<?
class TV  // كائن التلفاز 

// متغير يحمل لون التليفاز  
var $color'اسود ';  


function 
tv_color() 


echo 
" لون التلفاز هو   
$this-> color"





/* 

استخدمنا الكلمه  

$this-> 

في  استدعاء  المتغير   

color 

*/ 

}
?>


اذا اردت استدعاء متغير داخل الكائن عن طريق الكلمة

$this->يجب كتابتها هكذا



$this->المتغير


و ليس


$this->$المتغير


و كذلك عن طريق هذه الكلمة تستطيع استعداء الدوال داخل بعضها

ملحوظه : لا يتم استخدام هذه الكلمة إللا داخل الدوال فقط

مثال

<?
class TV  // كائن التلفاز 

// متغير يحمل لون التليفاز  
var $color'اسود ';  


function 
tv_color() 


return
" لون التلفاز هو   
$this-> color"






function 
total() 


print 
$this->tv_color(); // قمنا  بإستدعاء الداله tv_color 
// التي  تقوم بطباعة لون التلفاز  



}
?>




&- استخدام الكائن


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

new

مثال

<?
// عملية استدعاء الكائن  

$tv = new اسم الكائن 

// و لو اردنا استخدام احد خواص و التعديل عليها أو أحد الوظائف  

$tv->اسم الوظيفه();
?>


مثال

<?
class TV  // كائن التلفاز 

// متغير يحمل لون التليفاز  
var $color'اسود ';  


function 
tv_color() 


return
" لون التلفاز هو   
$this-> color"






function 
total() 


print 
$this->tv_color(); // قمنا  بإستدعاء الداله tv_color 
// التي  تقوم بطباعة لون التلفاز  






$tv= new TV

$tv->color='أحمر'

print 
$tv->total();
?>



5- الوراثة

الوراثه من أكثر الاشياء الممتعه في البرمجه الكائنيه
ما هي الوراثه
من المعروف في حياتنا العملية ان لكل شيئ مصدر و هذا المصدر يحتوي علي بعض صفات هذا الشيئ

مثلاً الانسان مصدره ابويه فيرث منهما بعض الصفات كلون البشره و العين و طول القامه و لكنه يوجد به ما يميزه عن ابويه

مثلاً السياره فمثلاً أول سياره تم إختارعها كانت ذات الاربع عجلات بالشكل البدائي أما الاجيال المتطورها اصبحت ذات صفات أخرى متطوره مختلفه عن اول سياره تم إختارعها و لكن الشكل المبدائي واحد

إذاً نستنتج من ذلك انه يوجد في اب و ابناء في علاقة الوراثه الاب يحمل صفات فيرثها منه ابنائه كامله و لكنها تحتوي ايضاً علي صفات تختلف عن الاب
الكلمة المفتاحيه extends
تتم عملية التوريث من خلال الكلمة المفتاحيه extends

مثال

<?
class 

  
  

  
  
class 
B  extends  اسم الكائن المراد الإرث منه  

  
  
}
?>



ملحوظه : الكائن الوريث يحتوي علي كل محتويات الكائن المورث أما الكائن المورث لا يحتوي علي صفات الكائن الوريث


مثال

<?
class 

  
var 
$name='الوراثه تختصر  الوقت '
  

  
  
class 
B  extends  A  

  
function 
msg() 

  
echo 
$this->name// استطعنا استخدام احد خصائص الكائن الاب   
// A  
// لأنه  ورث  كل  محتويات الكائن   
// A 
  

  
}
?>



6- الدالة construct و destruct

&مؤسس الصنف construct
ما هي مؤسس الصنف ؟

عندما تقوم ببناء الكائن قد تحتاج وضع إعدادات إفتراضيه له أو طباعة شيئاً معين عند استدعاء الكائن

فجائت ال php 5 بإضافة الكلمة المفتاحيه

__construct



مثال

<?
class TV 

  
  
function 
__construct() 

  
echo 
"تم إنشاء الكائن "
  

  
  

  
  
$tv = new TV // سيتم  طباعة ما في مؤسس الصنف
?>


&مدمر الصنف destruct
مثلاً عندما نقوم بمحو متغير الكائن من الذاكره عن طريق الداله

unset()


قد نحتاج لإجراء معين كمثلاً طباعة جملة معينه أو محو اشياء من الذاكره

مثال

<?
class TV 

  
  
function 
__construct() 

  
echo 
"تم إنشاء الكائن "
  

  
function 
__destruct() 

  
echo 
"تم مسح الكائن"
  

  

  
  
$tv = new TV // سيتم  طباعة ما في مؤسس الصنف 
  
unset($tv); // سيتم طباعة ما في مدمر الصنف
?>





7- نسخ الكائن
يتم نسخ الكائن عن طريق الكلمه المفتاحيه


clone



مثال

<?
class 

  
var 
$num=50
  

  
$c= new c
$s= clone $c// تمت عملية النسخ و اصبح لدينا الكائن المنسوخ تحت المتغير $s 
  
echo $c->num
  
echo 
"<br/>"
  
echo 
$s->num;
?>



و لكن في بعض الاشياء نريد تميير الكائن المنسوخ بالتعديل علي بعض الخواص


يتم ذلك من خلال الكلمة المفتاحيه


__clone


مثال

<?
class table 

  
var 
$border 3
var 
$color  "red"
  
function 
inputItem$num 

  
$this->border $this->border $num 
  
print 
" $num حجم حدود الجدول هو "
  

  
function 
__clone() 

  
$this->border 

  

  
$firstTable = new table
$firstTable->inputItem(20); 
$secondTable= clone $firstTable
  
echo  
"<br/>".$firstTable->border 
  
echo  
"<br/>".$secondTable->border ;
?>



8- تجريد الكائن

بوضع كلمة abstract قبل اسم الكائن يصبح هذا الكائن في هذه الحاله فئة مجرده بمعنى

انه لا يمكن استدعاؤها بواسطة الكائن و يكون هذا الصنف في هذه الحالة غير صالحه في عمل الكائن و لكن تكون صالحه فقط للوريث

مثال مأخوذ من موقع php.net

<?
abstract class AbstractClass 

    
// Force Extending class to define this method 
    
abstract function getValue(); 
    abstract  function 
prefixValue($prefix); 
  
    
// Common method 
   
function printOut() { 
        print 
$this->getValue() . "n"
    } 

  
class 
ConcreteClass1 extends AbstractClass 

   function 
getValue() { 
        return 
"ConcreteClass1"
    } 
  
   function 
prefixValue($prefix) { 
        return 
"{$prefix}ConcreteClass1"
    } 

  
class 
ConcreteClass2 extends AbstractClass 

     function 
getValue() { 
        return 
"ConcreteClass2"
    } 
  
    function 
prefixValue($prefix) { 
        return 
"{$prefix}ConcreteClass2"
    } 

  
$class1 = new ConcreteClass1
$class1->printOut(); 
echo 
$class1->prefixValue('FOO_') ."n"
  
$class2 = new ConcreteClass2
$class2->printOut(); 
echo 
$class2->prefixValue('FOO_') ."n";
?>


لاحظ وجود كلمة abstract قبل اسم الكائن ووجدها ايضاً قبل اسماء الدوال الموجوده داخل الكائن الاول , و لا يمكن عمل دالة مجرده داخل كائن غير مجرد اي لا يمكن استخدام

abstract

قبل اسم اي دالة موجوده داخل اي كائن عادي

9- الكلمات ألمفتاحيه private, public, protected

تستخدم هذه الكلمات قبل الخصائص و الدوال الموجوده داخل الكائن لجعلها ذو صفه معينه

فالكلمة

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

public : تجعل ما بعدها عام يمكن استخدمه في كل انحاء البرنامج و هو الوضع الافتراضي للدوال و الخصائص

protected : تجعل ما بعدها سري لا يمكن استخدمه اللا داخل الكائن و الوصول إليه داخل الوريث

مثال :

<?
class MyClass 

privat $color "blue"
public 
$color2 "red"
protected 
$color3 "white"
  
}
?>



10- الثوابت

بإمكانك ايضاً عمل ثوابت داخل الكائن مثلما تقوم بعمل متغيرات عن طريق الكلمه المقتاحيه


const


مثال

<?
class MyClass 


const 
color="red"

function 
__construct() 


print 
self::color


}
?>




11- نظره شامله علي الكائن
البرمجه الكائنيه جعلت البرامجه بال php أكثر تنظيماً و اسهل تطورياً فيمكنك مثلاً
عمل إذا ستقوم بعمل اسكربت لبنك تجاري

فبإمكانك عمل كائن لحساب الارباح و كائن لعرض بيانات العملاء و كائن لإدخال بياناتهم
و كائن لحساب فوائد القرود و كائن لعمل تحكم في بيانات العملاء و هكذا ثم ربطهم ببعض

فيتكون لك برنامج كبير من حيث الرقي و منظم يمكن إصلاح أخطائه بسهوله لأنه منظم و مجزء

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

و ايضاً يجب كتابة جملة الكائن في نفس المكائن الذي ستستدعي فيه الكائن أو عمله في ملف و من ثم جلبه عن طريق الداله


include()


مثلاً

يمكنك ايضاً استدعاء الكائن بدون استخدام الجمله new

عن طريق كتابة اسم الكائن و بعده :: و بعدها الخاصيه أو الوظيفه التي تريد استدعاؤها

مثال :

<?
class MyClass 


var 
$name="First object"




echo 
MyClass::name;
?>



نصائح قبل البدء في برمجة اسكربت معتمد علي الكائنات :

قم بشكل نظري بتحديد ما تريده من كائنات في هذا النظام و من ثم تحديد مهمة كل كائن

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





12- أمثله علي البرمجة الكائنيه


سنقوم بإنشاء كائن يقوم بالاتصال بقاعدة البيانات

أول شيئ يجب ان نحدد ما نريده من هذا الكائن

1- الاتصال بقاعدة البيانات
2- الاستعلام من هذه القاعدة
3- جلب البيانات منها في مصفوفه
4- قطع الاتصال بقاعدة البيانات

جيد ما هي الخصائص التي يجب ان تكون فيه

1- متغير يحتوي علي مقبض الاتصال بهذه القاعدة
2- متغير يكون يحتوي علي الاستعلامات


الان نقوم بتنفيذ هذا في الكائن

<? 
class DBConnect 


var 
$link=false;//مقبض الاتصال بقاعدة البيانات 

var $sql //مقبض الاستعلامات 

var $arr=array(); //  متغير  لجلب البيانات من قاعدة البيانات في مصفوفه 

function __construct($host,$user,$pass,$dbname)   //الاتصال بقاعدة البيانات 


$this->linkmysql_connect($host,$user,$pass); 

if(!
$this->link) exit ('لم يتم التمكن من الاتصال بالخادم'); 
else 
mysql_select_db($dbname); 



function 
query(&$query)  // الاستعلام من قاعدة البيانات 

$this->sqlmysql_query($query,$this->link); 

return 
$this->sql



function 
fetch_array($query)// جلب البيانات في مصفوفه 

$this->sql=$query
$this->arrmysql_fetch_array($this->sql); 
return 
$this->arr



function 
__destruct()   // تحرير الاستعلام و قطع الاتصال بقاعدة البيانات 


    if(
$this->sqlmysql_free_result($this->sql); 

    if(
$this->linkmysql_close(); 






?>


طريقة الاستخدام

<?
$db
= new DBConnect('اسم الخادم','اسم المستخدم','كلمة المرور','اسم قاعدة البيانات'); 

$sql=$db->query("الاستعلام"); 

$arr=$db->fetch_array($sql); 

unset(
$db);
?>



كاتب الموضوع : حازم علي
Facebook Twitter Google+ Pinterest Reddit StumbleUpon Linkedin Tumblr Google Bookmarks Email

أضف تعليقك على الموضوع