Menu
Coddy logo textTech

זריקת חריגה

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-PHP של Coddy. שיעור 55 מתוך 68.

לפעמים צריך לאותת שמשהו השתבש בקוד שלך ולעצור את הביצוע הרגיל. מילת המפתח throw מאפשרת לך ליצור ולזרוק חריגה באופן ידני, וכך נותנת לך שליטה מתי ומדוע התוכנית שלך צריכה לטפל במצב שגיאה.

כשאתם זורקים חריגה, אתם יוצרים אובייקט 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 שלך, וכך להבין ביתר קלות מה השתבש ולהגיב בהתאם.

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

נסו בעצמכם

<?php
// קראו את הקלטים
$price = floatval(fgets(STDIN));
$discountPercentage = intval(fgets(STDIN));

// TODO: כתבו את הקוד שלכם למטה
// צרו את הפונקציה calculateFinalPrice
// השתמשו בבלוק try...catch כדי לקרוא לפונקציה ולטפל בחריגות
// הדפיסו את הפלט המתאים

?>
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

תרגלו בעצמכם: קומפיילר PHP אונליין