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

إطلاق استثناء

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

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

عندما تقوم بطرح استثناء (exception)، فإنك تنشئ كائن Exception جديداً وتزوده برسالة وصفية حول الخطأ الذي حدث. سيقوم هذا الاستثناء بإيقاف تنفيذ الكود الحالي فوراً والبحث عن كتلة catch لمعالجته.

<?php
function checkAge($age) {
    if ($age < 0) {
        throw new Exception("Age cannot be negative");
    }
    echo "Age is valid: " . $age;
}

try {
    checkAge(-5);
} catch (Exception $e) {
    echo "Error: " . $e->getMessage();
}
?>

يتطلب بيان throw استخدام بناء الجملة new Exception()، حيث تقوم بتمرير رسالة نصية تصف المشكلة. يمكن استرداد هذه الرسالة لاحقاً باستخدام طريقة getMessage() في كتلة catch الخاصة بك، مما يسهل فهم الخطأ الذي حدث والاستجابة له بشكل مناسب.

quiz iconاختبر نفسك

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

quiz iconاختبر نفسك

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

quiz iconاختبر نفسك

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

challenge icon

التحدي

سهل

ستتلقى مدخلين: رقم يمثل السعر ورقم يمثل نسبة الخصم. سيتم توفير كلا المدخلين كأرقام (قد يكون السعر عشرياً، وستكون نسبة الخصم عدداً صحيحاً بين 0 و 100).

اقرأ كلا المدخلين وأنشئ دالة تسمى calculateFinalPrice تقبل معاملين: السعر ونسبة الخصم. داخل هذه الدالة، تحقق مما إذا كانت نسبة الخصم أكبر من 100 أو أقل من 0. إذا تحقق أي من الشرطين، فقم برمي Exception جديد مع الرسالة "Invalid discount percentage". إذا كان الخصم صالحاً، فاحسب السعر النهائي بعد تطبيق الخصم وأرجعه.

استخدم كتلة try...catch لاستدعاء الدالة مع المدخلات المقدمة. في كتلة try، استدعِ الدالة واطبع "Final price: " متبوعاً بالسعر النهائي المحسوب. في كتلة catch، تعامل مع الاستثناء عن طريق طباعة "Error: " متبوعاً برسالة الاستثناء باستخدام طريقة getMessage().

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

  • السطر الأول: رقم يمثل السعر (مثال: 100 أو 49.99)
  • السطر الثاني: عدد صحيح يمثل نسبة الخصم (مثال: 20 أو 150)

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

  • إذا كان الخصم صالحاً: Final price: متبوعاً بالسعر المحسوب بعد الخصم
  • إذا كان الخصم غير صالح: Error: Invalid discount percentage

ورقة مرجعية

استخدم الكلمة المفتاحية throw لإنشاء الاستثناءات ورميها يدوياً:

throw new Exception("Error message");

عندما يتم رمي استثناء، فإنه يوقف التنفيذ العادي ويبحث عن كتلة catch لمعالجته:

<?php
function checkAge($age) {
    if ($age < 0) {
        throw new Exception("Age cannot be negative");
    }
    echo "Age is valid: " . $age;
}

try {
    checkAge(-5);
} catch (Exception $e) {
    echo "Error: " . $e->getMessage();
}
?>

استخدم الأسلوب getMessage() في كتلة catch لاسترداد رسالة الاستثناء.

جرّب بنفسك

<?php
// قراءة المدخلات
$price = floatval(fgets(STDIN));
$discountPercentage = intval(fgets(STDIN));

// TODO: اكتب كودك أدناه
// calculateFinalPrice قم بإنشاء الدالة
// لاستدعاء الدالة ومعالجة الاستثناءات try...catch استخدم كتلة
// طباعة المخرجات المناسبة

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

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

جميع دروس Logic & Flow