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

مشاهدة النسخة كاملة : السلسلة الثالة من دروس php


moulay
08-05-2008, 18:33
الدرس السابع :
=============================================
ترتيب الكود البرمجي

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

وقد تكون مللت الروتين فأحضرت شي يساعدك على التخفيف من هذا الروتين ... فمثلاً عند استخدامك لبرنامج MS Word قد تكون مللت من تنسيق عدة نصوص بطريقة معينة فأنت عند ذلك تقوم بصناعة ماكرو يقوم بفعل العمل الذي كنت تفعله في عدة خطوات بخطوة واحد فقط !!



ولنقل أنك في حياتك اليومية وفي يوم إجازة وقررت أن تقوم بعمل تنظيف شامل (يا إلهي عليك غسيل أطباق الصحون وتنظيف الأثاث وتنظيف الأرضيه وترتيب المكتبة وترتيب غرفة النوم و ... و ... الخ ) عند ذلك فإنك تبحث عن طريقة عملية لكي يتم انجاز هذه المهمة في أسرع وقت فتقوم بتقسيم هذه المهمة الكبيرة على عده أقسام (التنظيف ،الترتيب ، الغسيل ،.....) ثم تقوم باستدعاء أطفالك وفلذات اكبادك وتقسم على كل واخد منهم مهمة بسيطة يستطيع القيام بها .. هذا التقسيم يسمي في عالم البرمجة بالـfunction (دالة أو وظيفة )

Function

الدالة هي جزء من كود البرنامج يتم تعريفه عن طريق المبرمج ليتم تنفيذ شي معين بواسطتها ، تقوم الدالة بأخذ قيم وتسمي (arguments معطيات ) كمدخلات ،، ثم تقوم بعمل بعض التعديلات على هذه المدخلات وتقوم بإخراج قيمة أخري في أكثر الأحيان تقوم الدالة بأخذ القيم ووضعها في متغيرات أخري تسمي بالـ(parameters) لكي يتم اجراء العمليات عليها داخل الدالة وهذه المتغيرات لاتعمل خارج الدالة أي أنها متغيرات خاصه بالدالة فقط ! ...في دروسنا السابقه قمنا باستخدام دوال عديده مثل دوال فرز المصفوفات ودوال ايجاد نوع البيانات ،،،، هذه المرة سنقوم ببناء دوالنا الخاصة بنا ،، ومن صنعنا نقوم باعطاءها المعلومات والبيانات وهي تقوم باجراء العمليات عليها ومن ثم اخراج الحلول ...


تعريف واستدعاء الدوال

لكي تقوم بتعريف دالة فإنك تقوم بكتابة الكلمة function متبوعة باسم الدالة والبارمترات الازمة والتي سيتم اجراء العمليات عليها بين قوسين ومن ثم تقوم بكتابة الكود الازم وسط { و }



الصيغه :

Function functionname (parameters)

{

function code

}

تقوم بكتابه اسم الدالة بدلاً من functionname ثم تقوم بتعريف المتحولات أو المتغيرات parameters ومن ثم تقوم بكتابه الكود الذي سوف يقوم بالمطلوب بين القوسين بدلاً من function code



دعنا الآن نقوم بكتابة دالة من إنشاءنا والتي تقوم باجراء عملية الجمع على متغيرين وسنقوم بتسمية الدالة باسم sumnoraml وهو اسم من تأليفنا ويدل على وظيفة وهدف الدالة ويمكن أن تقوم بتمسية الدالة باي اسم تريده ولست مجيراً بكتابه اسم معين



<?

Function sumnormal($a)

{

$a = $a + 100 ;

return $a;

}

?>



نقوم في هذه الدالة بإجراء عملية إضافة 100 على المتغير أو القيمة التي يتم تمريرها .


Return


يجب أن نضعها في نهاية كل دالة ، نستخدم هذه الكلمة لكي نقوم بإعلام الداله ان وظيفتها انتهت وايضا نستخدمها إذا كان لدينا أكثر من قيمة ونريد أن نقوم بإخبار الـPHP ماهي القيمة التي سيتم اعتمادها ففي مثالنا هذا أردنا إخبار الـPHP بأن يقوم بأخذ المتغير $a بانه هو القيمة النهائية مع أنه لو لم نضع المتغير فسيتم اعتباره هو الناتج النهائي لانه لايوجد متغير اخر تم عليه أي عمليات

الذي اقصده أننا لو كتبنا الكود بالشكل التالى :

<?

Function sumnormal($a)

{

$a = $a + 100 ;

return ;

}

?>



فإنه لاضرر من ذلك لأنه لا يوجد لدينا إلا قيمة واحدة لن يتم اعتماد قيمة غيرها ولكن لو افترضنا أنه لدينا أكثر من قيمة كما في المثال التالى :

<?

Function sul($a,$b)

{

$a = $a + 100 ;

$b= $b*100;

return $a ;

}

?>

هنا يجب تحديد أي المتغيرين سيكون هو القيمة النهائيه للدالة .



شرح الداله (sumnormal)

تقوم الدالة التي صنعناها بأخذ قيمتين ومن ثم فإنها تقوم بزياده العدد الذي يتم تمريره 100



ولكي نقوم بإخراج نتيجة الدالة فإننا ببساطة نسطيع ذلك باجراء أحد الأمرين echo أو print .

مثال :

<?

Function sumnormal($a)

{

$a = $a + 100 ;

return ;

}

echo sumnormal(500);

?>

لقد قمنا بتمرير رقم بدلاً من المتغير ويمكننا أيضا تمرير متغير بدلاً من الرقم

مثال :

<?

Function sumnormal($a)

{

$a = $a + 100 ;

return ;

}

$f=100;

echo sumnormal($f);

?>

لاحظ أننا استخدمنا متغير في الدالة (مما يثبت كلامنا في الأعلى أن للدالة متغيرات خاصة بها) وليس معني ذلك أننا لانستطيع استخدام متغيرات بنفس الاسم المذكور في الدالة فيمكننا مثلاً كتابة نفس اسم المتغير بدون حصول أي مشاكل كالتالى :

<?

Function sumnormal($a)

{

$a = $a + 100 ;

return ;

}

$a=100;

echo sumnormal($a);

?>

يمكننا أيضا استدعاء دالة بشكل عادي إذا كانت هي تقوم بالطباعة

مثال :
<?

Function sumnormal($a)

{

$a = $a + 100 ;

print $a;

return ;

}



$a=100;

sumnormal($a);

?>



print

يقوم الأمر print بنفس عمل الدالة echo ولايوجد بينهما اختلاف سوى أن الدالة echo قديمة وهي الأصل أما الدالة print فقد تم إنشاؤها في php4 ولايوجد أي فرق بينهما اطلاقا .

مثال :

<?

Print “احمد”;

?>

ويمكننا بها إخراج نتيجة دالة

<?

Function sumnormal($a)

{

$a = $a + 100 ;

return ;

}

$a=100;



print sumnormal($a);

?>



اين يتم وضع الداله ؟
يمكنك وضع الدالة في أول الكود أو في آخرها أي أنه لافرق بين :

<?

//لاحظ اننا قمنا بتعريف الداله اولا ثم استدعاءها

Function fares($d)

{

print “alfareees@hotmail.com”;

}



fares($d) ;

?>

وبين :

<?

//لاحظ اننا قمنا باستدعاء الداله اولا ثم تعريفها

fares($d) ;



Function fares($d)

{

print “alfareees@hotmail.com”;

}

?>

يمكنك أيضا عدم وضع متغيرات في الدالة كالتالى :

Html_header ()

{

Print “<html><head><title>alfareees</title></head>”;

Return ;

}

هذه الدالة تقوم بكتابة الطور الأول من صفحة html لاحظ أننا لم نقم بوضع أي متغيرات او عوامل او متحولات (سمها كما شئت ) .



تمرير القيم الى الدالة

هناك نوعين من تمرير القيم



1 - تمرير القيمه مباشره الى الداله (passing by value)

وذلك أن نضع القيمة مباشرة بدون إدراجها في متغيرات .

مثال :

<?

Function alfars ($f)

{

$f=$f+$f;

return ;

}

echo alfars(100);

?>

لاحظ أننا قمنا بإدراج القيمة مباشرة للدالة من غير وضعها في متغيرات .



2 - تمرير القيمه عن طريق المرجع (passing by reference)
نقصد بهذا أننا نقوم بوضع القمية في متغير أولا ثم نضع هذا المتغير في الدالة لكي يتم اجراء العمليات عليه مثال :

<?

Function alfars ($f)

{

$f=$f+$f;

return ;

}

$r =1000;

echo alfars($r);

?>



اعداد قيمة افتراضيه للدالة

تستطيع أن تجعل الـPHP4 يقوم بإدراج قيمة إفتراضية عند عدم تمرير متغيرات إليه

مثال :

<?

Function alfars ($f=40)

{

$f=$f+$f;

return ;

}

echo alfars();

?>

إذا لم يتم إعطاء قيمة للدالة فإنها ستفترض أن القيمة هي 40 مباشرة .

أما إذا تم تمرير قيمة أو متغير فإنه سيتم العمل بالقيمة التي تم تمريرها بدلاً من القيمة الإفتراضية

مثال :
<?

Function alfars ($f=40)

{

$f=$f+$f;

return ;

}

echo alfars(100);

?>



مدي المتغيرات (variable scope)

هناك متغيرات محلية (local) ومتغيرات عامة (global) ، نقصد بالمتغيرات المحلية التي تكون في داخل الدالة ونقصد بالعامة التي تكون في كود الـPHP بشكل عام

مثال
<?

//هذا متغير عام

$r= “salem”;

function ala($s)

{

//هذا متغير محلى

$s = “progrramer”;

}

echo $r ;

ala($s);

echo $s;

?>

مثال :

<?

//هذا متغير عام

$r= “salem”;

function ala($s)

{

//هذا متغير محلى

$s = “progrramer”;

}

echo $r ;

$s=10;

echo $s;

?>

في المثال الأول استطعنا طباعة المتغير $r ولم نسطتع طباعة المتغير $s لأنه محلى (لايتم تنفيذه الا داخل الدالة ) وعندما نريد طباعته فإننا يجب أن نطبع ناتج الدالة لكي نحصل عليه (أي أننا لانستطيع طباعته بشكل مباشر )

مثال :
<?

//هذا متغير عام

$r = “salem”;

function ala($s)

{

//هذا متغير محلى

$s = “programmer”;

}

//استطعنا طباعته بشكل مباشر

echo $r ;

ala($s);

//يجب استخدام الداله لكي يتم طباعته

echo ala($s);

?>

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

لكي نقوم بجعل المتغير الذي بداخل الدالة متغيراً عاماً فيمكننا ذلك بإحدي الطريقيتن التاليتين :

الطريقة الأولى :

<?

function ala($y)

{

echo $y. “<br>”;

global $s;

$s = "programmer";

return ;

}

$f =10;

ala($f);

echo $s;

?>

لاحظ أننا عندما استخدمنا global في داخل الدالة لكي يتم تعريف أن المتغير متغير عام وبعدما قمنا باستخدام الدالة قامت بطباعة المتغير المراد طباعته ومن ثم بعد ذلك قامت بتعريف متغير جديد ($s) وهذا المتغير متغير عام لأننا وضعنا قبله الكلمة global فاستطعنا طباعته بكل سهوله .





الطريقة الثانيه : هي أن نستخدم المصفوفة $GLOBALS التي تستخدم في PHP لتعريف المتغيرات العامة أيضا

مثال :

<?

function ala($y)

{

echo $y. “<br>”;

$GLOBALS[“s”] ;

$s = "programmer";

return ;

}

$f =10;

ala($f);

echo $s;

?>



المتغيرات المستقره (static variable)

اقصد بالمتغيرات المستقرة هي التي تكون قيمتها ثابتة

مثال :
<?

Function addfares($y)

{

$y;

$y=$y+1 ;

return $y;

}

echo addfares($y);

echo addfares($y);

echo addfares($y);

echo addfares($y);

?>



<?

Function addfares($y)

{

static $y;

$y=$y+1 ;

return $y;

}

echo addfares($y);

echo addfares($y);

echo addfares($y);

echo addfares($y);

?>

لاحظ عندما عرفنا المتغير بأنه static فانه يحتفظ بقيمته حتي لو انتهت الدالة .



دوال متداخلة

يمكننا عمل تعشيش للدوال مثلما كنا نفعل مع بناء القرارات والتكرارات

مثال :

<?

Function sum($sa)

{

$sa=$sa-1;

function goadd ($r)

{

$r = $r+$r;

return $r;

}

$sa= goadd ($sa);

return $sa;

}

echo sum (15);

?>

في مثالنا هذا لدينا دالتين الدالة الأولى هي sum والدالة الثانية هي goadd



وظيفة الدالة الأولى هي أن تقوم بالإنقاص من العدد الذي يمرر إليها واحد ثم تقوم بتطبيق دالة داخلية فيها هي goadd تقوم بزيادة العدد على نفسه .. ومن ثم قمنا بنداء الدالة الأولى (لأنها هي الاساس التي يوجد به الدوال الداخلية ) وطباعة قيمتها .



اشتمال الملفات (include files)
قد يكون لديك في برنامجك متغير متكرر في أكثر من صفحة أو رسالة خطأ معينة أو تريد إدرج نص كبير الحجم في صفحات متعددة

هنا يمكنك اشتمال ملفات في داخل ملفات الـPHP . هذه الملفات قد تحتوي على نصوص أو كود html أو كود PHP .



إن الصيغة التي تستخدمها لاشتمال الملفات هي :

Include (filename);



مثال :


قم بفتح ملف نصي واكتب فيه ماتشاء ثم احفظه باسم a.txt

قم بانشاء ملف php واكتب فيه ومن ثم احفظه باسم b.php

<?

Include (“a.txt”);

?>

انقلهما الى مجلد السيرفر .. شغل ملف الـ b.php وانظر النتيجة .

يمكنك أن تقوم بإنشاء ملف PHP وتحتفظ فيه بجميع الـfunction المطلوبة لبرنامجك وعند إرادتك لاستخدام أي واحدة منها تقوم فقط باشتمال الملف ومن ثم استدعاءها .



داله تلوين الكود
هل رايت مواقع تقوم بتلوين الكود بشكل مذهل مثل موقع zend ؟.... الأمر بسيط كل ماعليك أولا

قم بوضع الكود في ملف نصي وسمه باي اسم (مثلا file.txt ) وبعد ذلك قم باستخدام الدالة

Show_source

مثال :
<?

show_source ("file.txt");

?>
-------

moulay
08-05-2008, 18:34
الدرس الثامن
===========================================
تتبع وتصيد ومنع الاخطاء

(avoiding and handling errors)

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



قد يكون من أهداف تتبع الأخطاء الحماية بقدر أهميه البرنامج الجاري العمل عليه أو الموقع فكلما كان الموقع مهماً كان وجوب حمايته أكبر .



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



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



رسائل الخطا في الـPHP لها طريقتها وتقنيتها الخاصة التي تسير عليها فهي ليست مثل الجافا وليست مثل cgi

فالـ PHP لا تقوم بإرسال الخطأ إلى السيرفر بل تقوم بكتابة رسالة خطأ في مكان الخطأ .



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

<!- -

رساله الخطا

- - >



أنواع الأخطاء

هناك أنواع من الأخطاء منها الإملائية (Syntax Error) ومنها المنطقية ومنها أخطاء تحدث في وقت التنفيذ



ومثال الأخطاء الإملائية :

<?

Eco “1”;

// من المفترض أن تكت التالي :

Echo “1”;

?>

هذا سيعطيك رسالة خطأ Parse error



ومن الأخطاء الإملائية نسيان الفاصلة المنقوطة (semi-colon) في نهاية الدالة :

<?

Echo “hello”

// من المفترض أن تكت التالي :

Echo “hello”;

?>

هنا سوف يعطيك الـPHP رسالة خطأ لكن العجيب أنه لن يعطيك إياها بشكل صحيح فرسالة الخطأ تشير إلى أن السطر الرابع يحتوي على الخطأ بينما الخطأ هو في السطر الثاني .



وهناك خطأ آخر يحصل بسبب نسيان الـbrace ( وهي الاقواس ) :

<? Php

for ($loop = 0 ; $loop < 5 ; $loop ++ )

{

Echo “”;

?>

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



1 – نسيان الأقواس . مثال :

<?

for ($loop = 0 ; $loop < 5 ; $loop ++ )

{

for ($loop1 = 0 ; $loop1 < 10 ; $loop1 ++ )

{

for ($loop = 0 ; $loop < 5 ; $loop ++ )

{

code ….

}

}

في المثال السابق ينقصنا قوس إغلاق التكرار الأخير ( } )



2 - نسيان الفاصلة المنقوطة . مثال :

<?

Echo 10

<?



3 - خطأ إملائي في اسم function . مثال :

<?

Htmlspecialchar($I);

?>

سيعطيك رسالة خطأ :

Fatal error : call to Undefined function : htmlspecialchar().

وتصحيحها أن تكون :

<?

Htmlspecialchars($I);

?>



4 - نسيان إغلاق النص . مثال :

<?

Echo “arabbuilder;

?>

نسي الـ(")في نهاية الكلمة . وسيعطيك Parse error





الأخطاء المنطقية (Logical Errors)

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

<?

echo "ادخل عمرك :" ;

echo '<br>

<form method = "post" action = "age.php">

<input type= "text" name = "age">

<br>

<input type= submit value = "هل أنا كبير أم صغير ؟" >

</form>' ;

?>



في ملف age.php اكتب الكود التالي :

<?

If ($age<30) echo “انت صغير”;

If ($age>30) echo “انت كبير”;

?>

سيعمل السيكريبت بشكل صحيح .. ولكن ربما تخطأ أنت في كتابة العلامات المنطقية ( التي باللون الأحمر ) فتأتي النتائج بشكا خاطئ .



ومن الأخطاء المطنقية الأخطاء التي تقع في وقت التشغيل (Run times error) والتي تكون قد تقوم بإيقاف برنامجك بشكل كامل

مثال :

<?

$t=0;

$r=1;

$f=$r/$t;

?>

وعندها سينتج لك الرسالة التالية

Warning : Division by zero in (path) on line (line number )



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

وهو المثال الاول الذي ذكرناه سابقا (تقييم العمر) .



اخطاء التكرارات

قد يكون لديك أيضا تكرار فيه خطأ ولا يقوم بالتوقف نهائياً مثل هذا التكرار :

$c=1;

$t=true;

while ($t=true)

{

$c++;

}



لم نقم بعمل شي يوقف التكرار مثل أن تضع شرط يختبر قيمة المتغير (c$) ثم يقوم بإيقافه عند تعديه رقم معين وعلى ذلك فإن التكرار سيستمر بشكل غير متوقف ولن يعمل البرنامج .





عدم ارجاع قيمه من function

مثال :

<?

Function ($d)

{

$d =$d+$d;

}

الخطا هنا اننا لم نستخدم الـreturn لكي ننهي الدالة أو قد تكون الدالة تحتوي على أكثر من قيمة وننسي أن نقوم بتحديد القيمة النهائية للدالة



الخلط في المعاملات الحسابية والمنطقية

مثال :

If ($y=10) echo 12 ;

والمفترض أن تكون :

If ($y= =10) echo 12 ;



أفكار جيدة لتفادي الأخطاء

التعليقات

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

<?

//هذه الكود يقوم بطباعة كلمة أحمد

Echo “أحمد” ;

?>



الدوال

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

<?

/*

+- --------------------------------------------------------------+

| هذه الداله تقوم بقسمه العدد علي 2 |

+- --------------------------------------------------------------+

* /

function ($U)

{

$U=$U/2;

return $U ;

}

?>



Regular Expressions

هذه التقنية تساعدك على تفادي الأخطاء في صفحتك عند حدوثه مثل أن يقوم مستخدم ما بكتابة بريد الكتروني غير صحيح (مثال : a@y@.k.d) هذا البريد غير صحيح ولأجل أن تقوم بمنع حصول أي خطأ مثل ذلك وتقييد العبارات التي يدخلها المستخدم فإنك تقوم بإستخدام ال/RE (Regular Expressions) إنك بالأصح تجعل قواعد للكلمات التي يدخلها المستخدم فمثلاً تجعل المستخدم لايدخل سوي أرقام أو حروف فقط أو شكل معين من الكلمات ، تقوم أولاً بإنشاء نمط للكلمه التي تريد المستخدم أن يقوم بادخالها .


النمط (pattren)

ماهو النمط ؟ مارأيك إذا كتب المستخدم جملة في مربع نص تحتوي على عدة كلمات وتريد أن تتأكد من وجود كلمة معينة وسط هذه الجملة ، على حسب ما اخذناه من معلومات على المصفوفات سابقاً نستطيع فعل ذلك كالتالى :

<?

$words=”one, two, three, four, five,”;

$ty =explode (“”,$ty);

foreach ($ty as $w) {

if ($w = = “six”) echo “found string ‘two’”;

}

?>

لقد كان المتغير $words يحتوي على جملة تتكون من عده كلمات وعندما أردنا فحصه قمنا باستخلاصه في مصفوفة ثم بعد ذلك قمنا بفحص المصفوفة باستخدام التكرار foreach ، ومع ذلك الذي فعلناه فإن هذا الاستخدام غير عملي بتاتاً وهنا تبرز قوه Regular Expressions لاحظ الآن كيف نستخرجه بواسطة الـ Regular Expressions :

<?

$words=”one, two, three, four, five,”;

if (ereg(“one”,$words)) echo “لقد وجدت العدد ‘ one’ “ ;

?>

في هذا المثال قمنا باستخدام الدالة (ereg) ووضعنا في خانتها الأولى النمط (pattern) الذي نريد أن نتأكد من وجوده (أوالكلمة المراد البحث عنها) ووضعنا في الخانة الثانية المتغير الذي سيتم البحث فيه عن الكلمة أو النمط .

تقوم الدالة ereg بإعطاء القيمة true إذا تم العثور على الكلمة .

في الواقع هناك استخدامات أكثر فعالية للأنماط .

يمكننا مثلاً تخزين الكلمة إذا تم وجودها في مصفوفة خاصة كالتالى :

<?

$words=”one, two, one, four, five,”;

if (ereg(“one”,$words,$rok)) ;

echo $rok[0];

echo $rok[1];

?>

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



ماذا لو أردنا من التأكد من عدة كلمات ، عند ذلك فإننا نفعل التالى :

<?

$words=”one, two, one, four, five,”;

if (ereg(“one”,$words,$rok)) echo $rok[0];

if (ereg(“two”,$words,$rok)) echo $rok[0];

?>

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

أيضا فإن الـereg حساس لحالة الأحرف لاحظ هذا المثال :

<?

$words="one, two, vcx, four, five,";

if (ereg("One",$words,$rok)) echo $rok[0];

?>



لن يقوم بإخراج أي شي فقط لأن حرف الـO مختلف .







أيضا يمكنك البحث عن كلمة يسبقها فراغ مثلاً كالتالى :

<?

$words="one, two, vcxone, four, five,";

if (ereg("one",$words,$rok)) echo $rok[0];

?>

مثال آخر :

<?

$words="oned, two, vcxone, four, five,";

if (ereg("one",$words,$rok)) echo $rok[0];

?>

لاحظ في هذين المثالين أنه مع أن كلمة one غير موجودة بمفردها إنما موجودة كجزء من vcxone و oned ورغم ذلك فإن الدالة لم تأخذ اعتبارا لذلك بينما لو كتبنا كالتالى :

<?

$words="oned, two, vcxone, four, five,";

if (ereg(" one",$words,$rok)) echo $rok[0];

?>

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



يمكننا أن نفحص قيمة موجودة في متغير كالتالى :

<?

$reu = "one";

$words="one, two, vcxone, four, five,";

if (ereg($reu,$words,$rok)) echo $rok[0];

?>

هل لاحظت أننا فحصنا قيمة المتغير $rue بواسطة ereg مع $word ولم يتطلب منا ذلك أي شي إضافي غير اسم المتغير المراد البحث عن قيمته في الجمله .



يمكننا بالـ Regular Expression استعمال بعض الأحرف بشكل خاص التي لها استعمالها الخاص بواسطة الـ Regular Expressions



الأحرف الخاصة في الـ Regular Expression هي كالتالى :

. * ? + [ ] ( ) { } ^ $ | \

هذه الأحرف لها معناها الخاص في الـ Regular Expression



فقديماً مثلاً كنا نقول أنه لا يمكننا أن نستخدم علامتي تنصيص متداخلة من نفس النوع كالتالى :

<?

$r=”u\””;

?>

ولكي يتجاهل الـPHP هذا المعني فإننا نقوم بوضع (\) قبل علامة التنصيص .

ايضا مع الـ ereg فإن للـ(.) قداستها ولكي يتم تجاهلها فإننا نستخدم الـ(\)



تقوم الـ(.) بأخذ مكان حرف أو فراغ فمثلاً لاحظ المثال التالى :

<?

$P="I love yamen";

if (ereg ("love....",$P,$R)) echo $R[0];

?>

هل لاحظت الناتج ؟؟



ولكي يتم تجاهل قداسة الـ(.) في الـ Regular Expressions نقوم بوضع (\) قبلها . مثال :

<?

$P="I love yamen";

if (ereg ("love\.\.\.\.",$P,$R)) echo $R[0];

?>

في هذا المثال لن يتم طباعة أي شي لأنه لايوجد أي كلمة تطابق (love....) لأن الـ(.) فقدت قداستها وبدأ التدقيق في الكلمة حرفاً حرفاً .



صناعة فئة حروف [xyz]

أقصد بذلك أنني احدد نطاق معين من الكلمة من الممكن أن يكون في هذا النطاق أي حروف من الفئة التي أقوم بتحديدها أو الحروف التي أقوم بتحديدها .

مثال :

<?

$y=”how are you ? “ ;

if (ereg(“h[oe]” , $y)) echo “true”;

?>

هنا قام الـregular expression بالبحث عن أي كلمة تبدأ بالحرف h ومن ثم يتبعها أحد الحرفين o أو e مثال هذه الكلمات :

Hey – He – Hew - Homer

ولكنها لاتطابق :

Hty – Hnt - Hlay

أتمني أن تكون فهمت ما أرمي إليه



يمكننا أيضا أن نقوم بإخبار الـregular expression بأن لا يقوم باختيار كلمات تحتوي على حروف معينة وذلك فقط بإضافة ^

<?

$y=”how are you ? “ ;

if (ereg(“h[^oe]” , $y)) echo “true”;

?>

نقوم هنا بإخبار الـre بأن يقوم بفحص الجملة فإذا وجد أي كلمة تبدأ بـh ولاتحتوي على o أو e فإنه يقوم بإعطاء true وإذا لم يجد يقوم باعطاء false

وهذا الكلام يطابق الكلمات التالية :

Hay - Hana - Hkg

ولايوافق هذه الكلمات :

Home – Hore - Here



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

[^123456789]

يمكننا أن نستعمل اختصار لهذا الموضوع كالتالى :

[^0-9]

وحتي إذا أردنا أن يتأكد من وجود رقم من واحد الى تسعه فقط علينا مسح الـ^

[0-9]

وأيضا الحروف الصغيرة من a الى z

[a-z]

وإذا نريد التأكد من عدم وجودها

[^a-z]

نفس القصة مع الحروف الكبيرة .

[فقط الأعضاء المسجلين والمفعلين يمكنهم رؤية الوصلات]
في هذا المثال ستكون قيمة الـereg خطأ لأن العبارة لاتبدأ بحرفg

يمكننا فعل العكس بواسطة العلامه ($) التي عملها عكس (^) فهي تفحص إذا كان الحرف المراد فحصه موجود في نهاية الجملة

مثال :

<?

$y="how g" ;

if (ereg("g$",$y)) echo "true";

?>



يمكننا أيضا اختيار إذا ما كان واحد من نمطين صحيحاً بواسط العلامة ( | )

<?

$y="how g" ;

if (ereg("^y | g$",$y)) echo "true";

?>

في هذا المثال سيقوم الـPHP بفحص الجملة فإذا وافقت أحد النمطين كانت قيمة الـereg عند ذلك true .



يمكننا أيضا تحديد إذا ما كان حرف أو جملة متكررة بعدد من المرات أو مره واحدة باستخدام أحد هذه الثلاث رموز ( * ، + ، ? )

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

مثال :

Bea*t

وتوافق :

Bet

Beat

Beaat

تقوم علامة الجمع (+) بالتأكد من وجود عنصر مرة أو أكثر :

Bea+t

وتوافق :

Beat

Beaat

Beaaaaat

أما علامة الاستفهام فتقوم بالتأكد من وجود عنصر مرة واحده أو عدم وجوده بتاتاً :

Bea?t

وتوافق :

Bet

Beat

وتأكد دائماً أن هذه الثلاث علامات مسبوقه بحرف .



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

مثال :

(wo)?man

ويوافق :

man

woman



يمكننا التأكد من تكرر حرف بشكل معين من المرات أو أكبر من عدد معين من المرات أو أصغر من عدد معين من المرات باستخدام القوسين {x,y}

فمثلاً لو أردنا أن نتأكد من أن حرف (d) مكرر مرتين إلى أربع مرات :

d{2,4}

أما إذا أردنا أن نتأكد من أنه مكرر أكثر من مرتين إلى عدد غير محدود من المرات :

d{2,}

أما إذا أردناه أن يتكرر 4 مرات على الأكثر :

d{,4}

أو إذا اردناه أن يتكرر بعدد محدود من المرات :

d{8}



أخيراً نريد أن نلفت النظر إلى الاختصار (\b) الذي معناه أي شي ولكن ليس حرفاً (الحروف التي بين \w وبين \W تقريباً )

ملخص ما أخذناه من القواعد تجدونه في الجدول التالى :

[فقط الأعضاء المسجلين والمفعلين يمكنهم رؤية الوصلات]




مثال :

<?

Function mailcheck($mail,$t)

{

$T="^[_a-zA-Z0-9-]+(\.[_A-Za-z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*$";

If (EREG($T,$mail))

{

$r="the mail is true";

echo $r;

}

else

{

$r="the mail is not true";

echo $r;

}

return ;

}

mailcheck("alfareees@hotmail.com",$t);

?>



eregi()

الفرق بين هذه الدالة والدالة ereg أنه غير حساسة لحالة الأحرف كبيرة أو صغيرة أي أنه يمكننا كتابة المثال السابق كالتالى :

<?

Function mailcheck($mail,$t)

{

$T="^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$";

If (EREG($T,$mail))

{

$r="the mail is true";

echo $r;

}

else

{

$r="the mail is not true";

echo $r;

}

return ;

}

mailcheck("alfareees@hotmail.com",$t);

?>



ereg_replace()

ماذا لو أردت تحرير عبارة ما من أحرف معينة وقد تكون متكررة في جملة أوغير ذلك

لنفرض أن لدينا العبارة التالية :

Mohmed love his game …….

ونريد أن نتخلص من النقاط التي في نهاية العبارة

أو لدينا مثلاً هذا المسار :

C:\windows\desktop

ونريد أن نستبدل العلامة (\) بـ (/)





كل ذلك ممكن بواسطة الدالة ereg_replace وقواعد الـrgular expression التي أخذناها سابقاً

البنية التي نستخدمها للدالة كالتالى :

Ereg_replace(reg,string,var);

نضع في مكان reg القاعدة للـ regular expression ونضع مكان الـstring الحرف الجديد ونضع بدلاً من الـvar المتغير الذي نريد استخلاص الحروف منه .

مثال :

<?

$path =" C:\windows\desktop";

$tell= "Mohmed love his game .....";

$newpath= Ereg_replace("[\.]","/",$path);

$newtell= Ereg_replace("\.","",$tell);

echo $newpath;

echo "<br><br>";

echo $newtell;

?>


أساليب أخري لتتبع الأخطاء

استخدام عباره echo

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

مثال :

<?

Echo “this is : $name”;

Echo “<br>”;

Echo “this is : $Email”;

//كود يقوم بمعالجة معلومات المتغيرين

//طباعة المتغيرين بعد اداء عملية المعالجة ورؤية النتائج

Echo “this is after : $name”;

Echo “<br>”;

Echo “this is after: $Email”;

?>



فحص كود الـhtml

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



تجاهل الأخطاء

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

مثلاً نحن نعلم أن القسمة على الصفر من الأشياء الغير مقبولة في الـPHP وأنت صنعت دالة تقوم بالقسمة على صفر ولن يتم تنفيذها لأنها بالأصل خطأ ولكنك تريد أن يقوم PHP بتجاهلها فكل ما عليك أن تفعله هو وضع @ أمام الدالة .

مثال :

<?

function amail ($y)

{

$y=$y/0;

return $y;

}

$s= @amail(44);

echo $s;

?>
-------