Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

كتلة 'finally'

جزء من قسم Logic & Flow في رحلة PHP على Coddy — الدرس 54 من 68.

أحياناً تحتاج إلى كود يتم تشغيله بغض النظر عما إذا كان قد حدث استثناء أم لا. توفر كتلة finally هذا الضمان - فهي تحتوي على كود سيتم تنفيذه دائماً بعد اكتمال كتلة try...catch، مما يجعلها مثالية لعمليات التنظيف مثل إغلاق الملفات أو اتصالات قاعدة البيانات.

تعمل كتلة finally في جميع السيناريوهات: عندما تنجح كتلة try بدون استثناءات، وعندما يتم طرح استثناء والتقاطه، وحتى عندما يتم طرح استثناء ولكن لا يتم التقاطه. هذه الموثوقية تجعلها لا تقدر بثمن لضمان تشغيل كود التنظيف المهم دائمًا.

<?php
try {
    echo "Attempting operation...\n";
    // الكود الذي قد يطرح استثناءً
} catch (Exception $e) {
    echo "Error: " . $e->getMessage() . "\n";
} finally {
    echo "Cleanup completed.\n";
}
?>

يتم تنفيذ كتلة finally بعد انتهاء كل من كتلتي try و catch، مما يوفر مكاناً ثابتاً لشيفرة التنظيف الأساسية. يضمن ذلك تعامل البرنامج النصي الخاص بك مع الموارد بشكل صحيح والحفاظ على حالة نظيفة، بغض النظر عما يحدث أثناء التنفيذ.

quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

challenge icon

التحدي

سهل

ستتلقى مدخلين: نوع العملية ورقم. المدخل الأول هو سلسلة نصية ستكون إما "divide" أو "multiply". المدخل الثاني هو رقم سيتم استخدامه في العملية.

اقرأ كلا المدخلين وأنشئ كتلة try...catch...finally. داخل كتلة try، تحقق من نوع العملية:

  • إذا كانت العملية "divide"، فتحقق مما إذا كان الرقم صفراً. إذا كان صفراً، فقم برمي Exception جديد مع الرسالة "Cannot divide by zero". إذا لم يكن الرقم صفراً، فاحسب 100 مقسومة على الرقم واطبع "Result: " متبوعاً بالنتيجة.
  • إذا كانت العملية "multiply"، فاحسب 100 مضروبة في الرقم واطبع "Result: " متبوعاً بالنتيجة.

في كتلة catch، تعامل مع أي استثناء عن طريق طباعة "Error: " متبوعاً برسالة الاستثناء باستخدام طريقة getMessage().

في كتلة finally، اطبع "Operation completed".

تنسيق الإدخال:

  • السطر الأول: سلسلة نصية لنوع العملية (إما divide أو multiply)
  • السطر الثاني: رقم (مثال: 5 أو 0 أو 2.5)

المخرجات المتوقعة:

  • إذا نجحت العملية: Result: متبوعاً بالقيمة المحسوبة، ثم Operation completed في سطر جديد
  • إذا حدثت قسمة على صفر: Error: Cannot divide by zero، ثم Operation completed في سطر جديد

ورقة مرجعية

يحتوي قالب finally على كود يتم تنفيذه دائماً بعد اكتمال قالب try...catch، بغض النظر عما إذا كان قد حدث استثناء أم لا. إنه مثالي لعمليات التنظيف مثل إغلاق الملفات أو اتصالات قاعدة البيانات.

يتم تشغيل قالب finally في جميع السيناريوهات:

  • عندما ينجح قالب try بدون استثناءات
  • عندما يتم طرح استثناء والتقاطه
  • عندما يتم طرح استثناء ولكن لا يتم التقاطه
<?php
try {
    echo "Attempting operation...\n";
    // كود قد يطرح استثناءً
} catch (Exception $e) {
    echo "Error: " . $e->getMessage() . "\n";
} finally {
    echo "Cleanup completed.\n";
}
?>

يتم تنفيذ قالب finally بعد انتهاء كل من قالبي try و catch، مما يضمن تشغيل كود التنظيف الأساسي دائماً.

جرّب بنفسك

<?php
// قراءة المدخلات
$operation = trim(fgets(STDIN));
$number = floatval(fgets(STDIN));

// TODO: اكتب كودك أدناه
// قم بإنشاء كتلة try...catch...finally للتعامل مع العملية

?>
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Logic & Flow