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