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

مشاهدة النسخة كاملة : متابعة لسلسلة php 5 : درس متقدم في الاستثنئات (Exceptions)



mostafaxman
03-17-2009, 11:05 AM
بسم الله الرحمن الرحيم

أولاً إخواني الاعزاء أعتذر منكم و كلي أمل ان تتقبلوا عذري هذا في عدم إكمال دروة php 5 و هذا بسبب ظروف عديده

لهذا عزمت بإذن الرحمن علي مواصلة الدروس في الركن العام متاحة للجميع


لا أحب المقدمات فلندخل في صلب الموضوع لنتعرف علي الاستثنئات إحدى روائع ال php

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

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

(هناك خطأ في قيمة أحد المدخلات )

مثال علي هذه الداله




function example($num,$num2)
{
$num = round($num/$num2);
}


الان نريد عندما تعود إلينا الدالة round بـ false طباعة رسالة تبلغنا بوجود خطأ

سنقوم بالتحقق من ذلك عن طريق هذا الكود




if(!$num)
{

// بقية الكود
}


و الان يأتي دور الاسنثئنات

يتم كتابة استدعاء كائن الاستثنئاء بهذه الطريقه




throw new Exception("الرساله التي تود إستخراجها");


لنكتب الدالة الان مستخدمين خاصية الاستثناءات



function example($num,$num2)
{
$num = round($num/$num2);

if(!$num)
throw new Exception("هناك خطأ في قيمة أحد المدخلات");
}


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




try
{
// الكود
}


و بداخله نستخدم الداله التي استخدمنا فيها خاصية الاستثناءات Exception

ليصبح الكود كاملاً




function example($num,$num2)
{
$num = round($num/$num2);

if(!$num)
throw new Exception("هناك خطأ في قيمة أحد المدخلات");
}


try{

print example(4,100);// وضعنا معاملين خطأين


}


و الان تبقى استخراج رسالة الخطأ

و هذا يتم عن طريق الخاصية catch و يجب ان يتم كتابتها بعد try مباشرة
و فيها يتم استخراج الرسالة التي عينها + تفاصيل عنها كرقم السطر الذي به الكود و نص الكود و رقم السطر الخاص بالداله .. إلخ

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




catch (Exception اسم المتغير المراد إنشاء الكائن بداخله)
{

// هنا يتم إستخراج كل التفاصيل عن الرساله التي عينها

}


مثال



catch (Exception $var)
{

echo "<br/> $var->getMessage()<br/> ";
}


كما قلنا في أول الموضوع الاستثنئات عباره عن كائن و هذا الكائن به دوال (خواص)
و كل دالة لها دور في استخراج تفاصيل الساله التي عينها

الدوال هي




getMessage // وظيفتها إستخراج الرساله المعينه
getLine // وظيفتها جلب رقم السطر الموجود فيه كود الاستناء
getFile // وظيفتها جلب مسار الملف
getTraceAsStrin // وظيفتها جلب رقم السطر المكتوب فيه الكود + مسار الملف + و رقم الكود



مثال كامل





function example($num,$num2)
{
$num = round($num/$num2);

if(!$num)
throw new Exception("هناك خطأ في قيمة أحد المدخلات");
}


try{

print example(4,100);


}
catch(Exception $Exception)
{
echo '<br/>'.$Exception->getMessage();
echo '<br/>'.$Exception->getTraceAsString();

}


مثال أخر




try{

$num = round(100/400);

if(!$num)
throw new Exception("هناك خطأ في قيمة أحد المدخلات");



}
catch(Exception $Exception)
{
echo $Exception->getMessage();

}


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

حازم علي