موسوعة المبرمجون المسلمون موسوعة علمية ثقافية تهتم بالحاسوب و البرمجة و الانترنت و الأسرة و المجتمع و العلوم و الفتاوى الإسلامية

 

الفئات والكائنات : المقدمة . بداية انشاء فئة . مثال التطبيق .  دالة الوصول  . كائن وأستخدامات متعددة  . 
الكـاتب : [ rafia ]


     - التعريف للكائن ( Object ) باختصار :
هي عملية إنشاء سمات وعمليات على فئات يتم تطبيقها بعد ذلك على البيانات ، ليقوم بمعالجتها ، ووظائف الكائن مربوطة بالبينات التي يستعملها .

- توضيح لعمل الكائنات :
إنشاء كائن في فئة نقوم بمعالجتها و إضافة سمات على هذه الفئة ثم نقوم بإنشاء تواجد للفئات ونمرر عليه البيانات التي تريد أن تمر بالمعالجة التي مرت عليها الفئة إما معالجة كاملة أو جزئية بحسب الرغبة .

بداية انشاء فئة نستخدم الكلمة الاساسية class ونمسي الفئة . على هذة الصورة :

Code ..

<?
class MyClass
{
}
?>



حيث MyClass اسم الفئة .

حتى نقوم باجراء عمليات يجب تعريف متغيرات داخل الفئة بستخدام var مثال :

Code ..

<?
var $a;
?>



ولكي نستخدم هذه المتغيرات داخل الدوال في الفئات لدينا مؤشر للوصول له على سبيل المثال نصل الى المتغير السابق

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

مثال لتصريح متغير , ومثال بدون تصريح متغير كلاهما يقوم بنفس الوظيفة :

مثال 1 ( اختبار البريد ) :

Code ..

<?
class myclass
{
var
$email;

function
check_email(){
if(
ereg("^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+
\.
[a-zA-Z0-9\-\.]+$",$this->email))
return (
true);
else
return (
false);
}
}
// أنشاء تواجد للفئة
$newclass = new myclass;
// الوصول للبريد الذ سوف نختبره
$newclass->email = "you@hotmail.com";
//وضع الدالة في متغير
$check_email = $newclass->check_email();
// شرط لاظهار نتيجة مختلفة عند اختبار البريد
if(!$check_email){
echo
"البريد الاكتروني غير صحيح";
} else {
echo
"البريد الاكتروني صحيح";
}
?>



مثال 2 ( اختبار البريد ) :

Code ..

<?
class MyClass
{
function
check_email($email){
if(
ereg("^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+
\.
[a-zA-Z0-9\-\.]+$", $email))
return (
true);
else
return (
false);
}
}
// أنشاء تواجد للفائة
$newclass = new MyClass;
// البريد الذي سوف نختبرة
$email = "you@hotmail.com";
// تمرير البريد على الدالة ثم حملها في متغير
$check_email = $newclass->check_email($eamil);
// شرط لاظهار نتيجة مختلفة عند اختبار البريد
if(!$check_email){
echo
"البريد الاكتروني غير صحيح";
} else {
echo
"البريد الاكتروني صحيح";
}
?>



ركز في الامثلة السابقة وتعرف على الفرق .

لكي تتحقق من النتيجة قم بتغيير البريد مرة ضع بريد صحيح ومرة خطأ ..

من الامثلة السابقة اتضح انشاء تواجد للفئة بستخدام الكلمة الاساسية new ، ثم وضعناها في متغير newclass ، هذا المتغير هو الذي سوف نصل عن طريقة لسمات الفئة .

وفي الامثلة السابقة وصنا لهذه السمات بهذه الصورة :

Code ..

<?
// الوصول لدالة الاختبار في المثال الاول
$newclass->check_email();

// الوصول لمتغير تم تصريحة في الفئة
$newclass->email

// الوصول لدالة وتمرير متغير في المثال الثاني
$newclass->check_email($eamil);
?>



في بعض الاحيان نحتاج لانشاء دالة وصول داخل الفئة
لمتغيرات تم تصريحها او لسمات معينة حتى نصل اليها بسهولة ، ولكي تساعد دالة الوصول اثناء انشاء التواجد .

وهنا مثال لفئة تحتوي على دالة وصول وفئة لا تحتوي على دالة وصول :

مثال 3 (الاتصال بقاعدة البينات ) بدون دالة وصول :

Code ..

<?
class mysql
{
var
$dbserver;
var
$dbuser;
var
$dbpword;
var
$dbname;
var
$link;

// دالة الاتصال بالقاعدة
function connect()
{
$this->link= mysql_pconnect($this->dbserver,
$this->dbuser, $this->dbpword);
if (!
$this->link)
die(
"لايمكن الاتصال بقاعدة البينات" );
$dbselect = mysql_select_db($this->dbname,$this->link);
if (!
$dbselect)
die(
"لايمكن تحديد قاعدة البينات");
return
$this->link;
}
}
// نهاية الفائة

// التطبيق . انشاء التواجد
$db = new mysql;
$db->dbserver = "localhost";
$db->dbname = "dbrafia";
$db->dbuser = "root";
$db->dbpword = "";
$db->connect();
//بهذه الطريقة تمكنا من الاتصال
?>



مثال 4 (الاتصال بقاعدة البينات ) باستخدام دالة وصول :

Code ..

<?
class mysql
{
var
$dbserver;
var
$dbuser;
var
$dbpword;
var
$dbname;
var
$link;

// دالة الوصول
function mysql($db_server,$db_name,$db_user,$db_pword)
{
$this->dbserver = $db_server;
$this->dbname = $db_name;
$this->dbuser = $db_user;
$this->dbpword = $db_pword;

}

// دالة الاتصال بالقاعدة
function connect()
{
$this->link= mysql_pconnect($this->dbserver,
$this->dbuser, $this->dbpword);
if (!
$this->link)
die(
"لايمكن الاتصال بقاعدة البينات" );
$dbselect = mysql_select_db($this->dbname,$this->link);
if (!
$dbselect)
die(
"لايمكن تحديد قاعدة البينات");
return
$this->link;
}
}
// نهاية الفئة

// التطبيق . انشاء التواجد
$db = new mysql("localhost","dbrafia","root","dbpword");
$db->connect();
//بهذه الطريقة تمكنا من الاتصال
?>



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

ما هو الجديد في المثال الرابع ؟
تسمية دالة الوصول لاحظ انها بنفس اسم الفئة mysql ، التسمية غير الازامية لكن هنا كي يتم تطبيق الدالة عند انشاء الفئة تطبيق تلقائي ، مثال :

Code ..

<?
$db
= new mysql("localhost","dbrafia","root","dbpword");
?>



بهذا يتم انشاء الفئة مع تطبيق دالة الوصول .

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


Code ..

<?
class Table
{
// دالة الوان الصفوف
function setGrid($rows, $columns)
{
$this->rows = $rows;
$this->columns = $columns;
}

// دالة لون الخط
function setInterface($bcolor, $fcolor, $font)
{
$this->bcolor = $bcolor;
$this->fcolor = $fcolor;
$this->font = $font;
}

// دالة انشاء الجدول
function drawTable()
{
echo
"<table border=1 bgcolor=" . $this->bcolor . ">";

for (
$x=1; $x<=$this->rows;$x++)
{
echo
"<tr>";

for (
$y=1; $y<=$this->columns;$y++)
{
echo
"<td><font face=\"" . $this->font . "\" color=" .
$this->fcolor .
">" . $x . ", " . $y . "</font></td>";
}
echo
"</tr>";
}
echo
"</table>";
}
}
?>
<html>
<head>
<basefont face=Arial>
</head>
<body>
<?

// الجدول الاول
$alpha = new Table;
$alpha->setGrid(4,4);
$alpha->setInterface("green", "white", "Arial");
$alpha->drawTable();

?>
<p>
<?

// الجدول الثاني
$beta = new Table;
$beta->setGrid(1,9);
$beta->setInterface("blue", "white", "Arial Black");
$beta->drawTable();

?>
<p>
<?

// الجدول الثالث
$gamma = new Table;
$gamma->setGrid(2,4);
$gamma->setInterface("black", "white", "Verdana");
$gamma->drawTable();

// الجدول الرابع
$omega = new Table;
$omega->setGrid(4,2);
$omega->setInterface("white", "black", "Trebuchet MS");
$omega->drawTable();

?>
</body>
</html>


النتيجة انظر الى الصورة
http://www.rafiaphp.com/rafia/ima/class.gif

إلى هنا نتوقف وبقي لدينا تطبيق الوراثة والحديث عنها بتفصيل
وباقي المهارات يتعرف عليها الشخص اثناء التطبيق والاطلاع على الفئات .

موضوع مفيد :
http://www.azzozhsn.com/showpage.php?id=89


يمكنك أن تجد الدرس على http://www.phpvillage.com/p.php?page=0&idp=73


جميع الحقوق محفوظة لـ [ www.phpvillage.com ]

 

جميع الحقوق محفوظة لشبكة المبرمجون المسلمون

رشحني في دليل المواقع العربية