شرح مفهوم الـExceptions في الـPHP
السلام عليكم و رحمة الله و بركاته.
ما هو الـException ؟
ببساطه Exception هو حدث معين يعمل على تغيير المجرى الطبيعي للبرنامج اذا حدث خطأ بحيث يتم التعامل معه بطريقة معينة.
ماذا يحدث عند ظهور Exception ؟
- يتم حفظ الحالة الحالية للكود.
- يتم تحويل مجرى البرنامج الى function معينة تتعامل مع هذا الـException.
- و أخير، على حسب تصميم البرنامج يتم استكمال البرنامج من نقطة الحفظ أو ايقاف عمل البرنامج أو تحويل مجرى البرنامج الى مكان آخر في الكود.
ملاحظة: يجب استخدام الـException فقط عند ظهور الخطأ ولا يجب استخدامه فقط للانتقال الى مكان آخر في الكود.
في هذا الدرس سوف:
- نشرح الاستخدام الأساسي للـExceptions.
- كيفية بناء Exception خاص(Custom Exception).
الإستخدام الأساسي:
يتم استخدام (throw) لالقاء Exception بحيث يتم انشاء اوبجت من الكلاس Exception و تمرير اليه الرسالة المراد اظهارها كما موضح الكود بالأسفل.
<?php
//انشاء fucntion و القاء بداخلها Exception
function checkNum($number) {
if($number>1) {
throw new Exception("Value must be 1 or below");
}
return true;
}
//هذا الاستدعاء سوف يظهر الـExcpetion
checkNum(2);
?>
و اذا أجرينا excute لهذا الكود سوف يظهر لنا التالي:
Fatal error: Uncaught exception 'Exception' with message 'Value must be 1 or below' in C:\webfolder\test.php:6 Stack trace: #0 C:\webfolder\test.php(12): checkNum(28) #1 {main} thrown in C:\webfolder\test.php on line 6
كما نلاحظ عند استدعاء الـFunction تم اظهار الـException و اظهار الرسالة معه، و لكن يجب علينا التعامل مع هذا الـException.
Try and Catch:
حتى نتعامل مع الـException الظاهر في المثال السابق يجب علينا استخدام try and catch كما موضح أدناه.
<?php
//انشاء function و القاء Exception
function checkNum($number) {
if($number>1) {
throw new Exception("Value must be 1 or below");
}
return true;
}
//الـException سوف يظهر في الـtry
try {
checkNum(2);
//اذا تم اظهار الـException الكود بالأسفل لن يتم عمله.
echo 'If you see this, the number is 1 or below';
}
//الامساك بالـException و عمل شيء معين به.
catch(Exception $e) {
echo 'Message: ' .$e->getMessage();
}
?>
Message: Value must be 1 or below
شرح المثال السابق:
- تم انشاء checkNum() و التي تعمل على التحقق من أن الرقم أكبر من 1، فاذا كان كذلك يتم القاء الـException.
- الـfunction و التي تسمى checkNum() يتم استدعاؤها في داخل الـtry block حتى يتم التعامل مع احتمالية ظهور الException من الـfunction المستدعاة
- الـcatch block تستقبل الـexception و تتعامل معه بحيث يتم طبع الرسالة عن طريق استخدام الـgetMessage().
كيفية انشاء Exception خاص:
حتى يتم انشاء Exception خاص ( Custom Exception handler) يجب علينا انشاء كلاس و يقوم هذا الكلاس بـextends للكلاس Exception كما هو موضح أدناه.
<?php
class InvalidCCNumberException extends Exception {
public function __construct($message = 'No CC Number', $code = 0, $previous = null) {
parent::__construct($message, $code, $previous);
}
}
function processCC($num = null) {
if (is_null($num)) {
throw new InvalidCCNumberException();
}
//سوف يتم استدعاء الاكود بالاسفل اذا لم يحصل الـException
echo 'processed';
}
try{
processCC();
} catch (InvalidCCNumberException $e) {
echo "<pre>";
echo $e->getMessage();
echo "<br>";
echo get_class($e);
} finally {
echo "\nfinal!";
}
?>
قمنا بعمل التالي:
- انشاء كلاس و سميناه على سبيل المثال InvalidCCNumberException بحيث يقوم بـextends الكلاس Exception فيتم inherit جميع الميثودز و المتغيرات.
- قمنا بعمل override للميثود __construct() و التي تقوم بتمرير الرسالة المعطاة للأوبجكت من كلاس Exception.
- انشاء function وتسميتها processCC و التي بدورها تقوم بـthrow الـException اذا كان الـparameter فارغ (null).
- قمنا باستدعاء الـfunction داخل الـtry block حتى نتعامل مع الـException اذا ظهر.
- في الـcatch block طبعنا الرسالة و الكلاس الخاص بأوجكت الـException.
- و بالنهاية أضفنا الـfinally block و التي سوف يتم تنفيذ الكود بداخلها سواء ظهر الـException او لم يظهر.
و اذا أجرينا excute لهذا الكود سوف يظهر لنا التالي:
No CC Number InvalidCCNumberException final!
في النهاية، هناك بعض كلاسات الـException المعرفة سابقا و المتواجدة في مكتبات اللغة الخاصة بالـPHP و منها الموضح أدناه في الصورة.
بحيث يتم استخدامها لتسهيل عملية الـdebugging.
و هنا وصلنا الى نهاية هذا الدرس.?
أتمنى أني قد وفقت بايصال المعلومة.
التعليقات (0)
لايوجد لديك حساب في عالم البرمجة؟
تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !