Menu
Coddy logo textTech

שימוש בחריגה מותאמת אישית

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

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

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

<?php
class InvalidEmailException extends Exception {}

function validateEmail($email) {
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        throw new InvalidEmailException("Invalid email format: " . $email);
    }
    echo "Email is valid!";
}
?>

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

<?php
try {
    validateEmail("invalid-email");
} catch (InvalidEmailException $e) {
    echo "Email error: " . $e->getMessage();
}
?>

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

challenge icon

אתגר

קל

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

צרו מחלקת חריגה מותאמת אישית בשם InvalidCredentialsException שיורשת ממחלקת הבסיס Exception.

צרו פונקציה בשם validateCredentials שמקבלת שלושה פרמטרים: שם משתמש, סיסמה ואורך מינימלי. בתוך הפונקציה:

  • אם שם המשתמש ריק (מחרוזת ריקה), זרקו InvalidCredentialsException עם ההודעה "Username cannot be empty"
  • אם אורך הסיסמה קטן מהאורך המינימלי, זרקו InvalidCredentialsException עם ההודעה "Password must be at least X characters long" (כאשר X הוא ערך האורך המינימלי)
  • אם שתי הבדיקות עוברות, הדפיסו "Credentials are valid"

השתמשו בבלוק try...catch כדי לקרוא לפונקציה עם הקלטים שסופקו. בבלוק catch, תפסו באופן ספציפי את InvalidCredentialsException והדפיסו "Validation error: " ואחריו את הודעת החריגה באמצעות המתודה getMessage().

פורמט הקלט:

  • שורה ראשונה: מחרוזת המייצגת את שם המשתמש (לדוגמה: john_doe או מחרוזת ריקה)
  • שורה שנייה: מחרוזת המייצגת את הסיסמה (לדוגמה: pass123)
  • שורה שלישית: מספר שלם המייצג את האורך המינימלי של הסיסמה (לדוגמה: 8)

פלט צפוי:

  • אם פרטי הכניסה תקינים: Credentials are valid
  • אם שם המשתמש ריק: Validation error: Username cannot be empty
  • אם הסיסמה קצרה מדי: Validation error: Password must be at least X characters long (כאשר X הוא האורך המינימלי)

נסו בעצמכם

<?php
// קראו את הקלט
$username = trim(fgets(STDIN));
$password = trim(fgets(STDIN));
$minLength = intval(fgets(STDIN));

// TODO: כתבו את הקוד שלכם למטה
// 1. צרו את המחלקה InvalidCredentialsException
// 2. צרו את הפונקציה validateCredentials
// 3. השתמשו בבלוק try...catch כדי לקרוא לפונקציה ולטפל בחריגות

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

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

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

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