شرح مفهوم الـExceptions في الـPHP

Rami Shalahمنذ 6 سنوات

السلام عليكم و رحمة الله و بركاته.

ما هو الـ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();
}
?>

 

و اذا أجرينا excute لهذا الكود سوف يظهر لنا التالي:
 
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.


qlTsJ.png.784e485562b11222d5adab4d2b79ffdb.png

و هنا وصلنا الى نهاية هذا الدرس.?
أتمنى أني قد وفقت بايصال المعلومة.

كلمات دليلية:
2
إعجاب
3134
مشاهدات
0
مشاركة
1
متابع
متميز
محتوى رهيب

التعليقات (0)

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !