זריקת חריגה
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-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 שלך, וכך להבין ביתר קלות מה השתבש ולהגיב בהתאם.
אתגר
קלתקבל שני קלטים: מספר שמייצג מחיר ומספר שמייצג אחוז הנחה. שני הקלטים יסופקו כמספרים (המחיר עשוי להיות מספר עשרוני, ואחוז ההנחה יהיה מספר שלם בין 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 כדי לקרוא לפונקציה ולטפל בחריגות
// הדפיסו את הפלט המתאים
?>השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1פונקציות מתקדמות
פונקציות אנונימיותסגירות ו-'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'סיכום: מיון טבלת מוביליםתרגלו בעצמכם: קומפיילר PHP אונליין