fbpx

تعلم لغة php – الدرس العاشر الاستثناءات Exceptions



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

try {
  echo 2 / 0;
} catch (Exception $e) {
  echo "Caught exception: Division by zero!";
}

يمكن استخدام كتل التقاط متعددة لالتقاط فئات مختلفة من الاستثناءات. سيستمر التنفيذ العادي (عندما لا يتم طرح استثناء ضمن كتلة المحاولة) بعد كتلة الالتقاط الأخيرة المحددة في التسلسل. يمكن طرح الاستثناءات (أو إعادة طرحها) داخل كتلة التقاط.

if (4/2 == 2) {
  echo "Right!";
} else {
  throw new Exception("Wrong answer!");
}

عند طرح استثناء ، لن يتم تنفيذ التعليمات البرمجية التي تلي العبارة ، وستحاول PHP العثور على أول كتلة مطابقة متطابقة. إذا لم يتم اكتشاف استثناء ، فسيتم إصدار خطأ فادح PHP برسالة “استثناء غير مسبوق …” ، ما لم يتم تعريف معالج باستخدام set_exception_handler () .

Finally Blocks

في PHP 5.5 والإصدارات الأحدث ، يمكن أيضًا تحديد كتلة أخيرة بعد أو بدلاً من كتل الالتقاط. سيتم دائمًا تنفيذ التعليمات البرمجية داخل الكتلة الأخيرة بعد كتل المحاولة والتقاط ، بغض النظر عما إذا كان قد تم طرح استثناء ، وقبل استئناف التنفيذ العادي.

try {
  echo 4/0;
} catch (Exception $e) {
  echo "Divided by zero!";
} finally {
  echo "This will be outputed even if exception will happen!";
}

تمرين

استخدم كتلة try-catch أخيرا لالتقاط الاستثناء أولاً وطباعة Exception catch! ثم قم بطباعة Done ! . يجب أن يبدو الناتج النهائي كما يلي: Exception caught! Done!

<?php
# ستؤدي هذه الوظيفة إلى استثناء!
function throw_exception() {
  throw new Exception("Exception!");
}

# إحاطة البيان في كتلة محاولة أخيرًا!
throw_exception();
?>

الحل

<?php
# ستؤدي هذه الوظيفة إلى استثناء!
function throw_exception() {
  throw new Exception("Exception!");
}

# إحاطة البيان في كتلة محاولة أخيرًا!
try {
  throw_exception();
} catch (Exception $e) {
  echo "Exception caught!\n";
} finally {
  echo "Done!";
}
?>

سنحصل على النتيجة التالية عند التشغيل

Exception caught!
Done!





Leave a Reply