كتلة '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، مما يوفر مكاناً ثابتاً لشيفرة التنظيف الأساسية. يضمن ذلك تعامل البرنامج النصي الخاص بك مع الموارد بشكل صحيح والحفاظ على حالة نظيفة، بغض النظر عما يحدث أثناء التنفيذ.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
التحدي
سهلستتلقى مدخلين: نوع العملية ورقم. المدخل الأول هو سلسلة نصية ستكون إما "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 للتعامل مع العملية
?>يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1الدوال المتقدمة
الدوال المجهولةالـ Closures وكلمة 'use'دوال السهمدوال الـ Callbackاستخدام 'call_user_func'دوال المتغيراتالتمرير بالمرجعالدوال العوديةمراجعة: مزيج الدوال4المصفوفات متعددة الأبعاد
إنشاء مصفوفة ثنائية الأبعادالوصول إلى عناصر المصفوفة ثنائية الأبعادتعديل عناصر المصفوفة ثنائية الأبعادالتكرار باستخدام الحلقات المتداخلةالمصفوفات الترابطية ثنائية الأبعادمراجعة: تمرين الشبكة البسيطة2معالجة المصفوفات المتقدمة
الإضافة باستخدام 'array_push'الحذف باستخدام 'array_pop'الإضافة باستخدام 'array_unshift'الحذف باستخدام 'array_shift'دمج المصفوفات المفهرسةدمج المصفوفات الترابطيةالاستخراج باستخدام 'array_slice'القيم باستخدام 'in_array'المفاتيح باستخدام 'array_search'مراجعة: تمرين قائمة التشغيل5سجل درجات الطلاب
إعداد المشروع: هيكل البياناتإضافة طالب جديدإضافة درجة لطالبحساب متوسط الطالبإيجاد الطالب المتفوقإنشاء تقرير الدرجات8معالجة الأخطاء والاستثناءات
فهم أخطاء PHPكتلة 'try...catch'كتلة 'finally'إطلاق استثناءإنشاء استثناء مخصصاستخدام استثناء مخصصمراجعة: التحقق من صحة المدخلات3ترتيب المصفوفات
ترتيب المصفوفات المفهرسة تصاعدياًترتيب المصفوفات المفهرسة تنازلياًترتيب المصفوفات الترابطية حسب القيمةترتيب المصفوفات الترابطية حسب المفتاحالترتيب بالترتيب الطبيعيالترتيب المخصص باستخدام 'usort'مراجعة: ترتيب لوحة المتصدرين