להשתמש ב-try & catch

דרך כתיבה שימושית וחשובה כאשר כותבים סקריפטים של PHP שקוראים ל-web services ולמשאבים חיצוניים.

לא מזמן יצא לי לפרסם מאמר על קוד מסוים שמדגים התקשרות עם טרנזילה באמצעות cURL. במאמר ניתן קוד מסוים ששימש כדוגמה. המאמר פורסם גם בניוזגיק, בתגובות חטפתי אש וגופרית מאחד המגיבים על כך שלא הכללתי בקוד את try&catch. הבטחתי שאני אקדיש מאמר מיוחד לטכניקה הפשוטה מאד הזו שאמורה לשמש כל מתכנת כאשר הוא כותב סקריפטים (גם פשוטים). אם תקדישו חמש דקות ללימוד הטכניקה הפשוטה הזו, גם אתם תוכלו להגביר את עמידות הסקריפטים שלכם. שימוש נבון בביטויי try&catch נחשבים להרגל קוד תקין. מצד שני, צריך לא להגזים.

ראשית כל, הסינטקס המאד מאד פשוט:


try {
//whatever code
}
catch (Exception $e) {
    echo 'Exception caught: ',  $e->getMessage(), "\n";
}

מה קורה פה? כל מה שיש בתוך הבלוק של ה-try ירוץ כרגיל, אבל תהיה תקלה כלשהי בתוך הבלוק הזה, הסקריפט לא יעצור לחלוטין אלא יריץ את מה שיש בתוך ה-catch ואז ימשיך לרוץ כרגיל.

למה זה טוב? למשל הדוגמה הטובה ביותר היא משאב חיצוני שאני טוען אותו ואני לא סגור במאה אחוז שהטעינה תצליח (ובטעינה של משאבים חיצוניים, כמו וובסרביסים למשל, בחיים אי אפשר להיות בטוח במאה אחוז שהטעינה תצליח). דוגמה נוספת ומוצלחת היא כתיבת מודול שאתה לא יודע באיזו סביבת PHP הוא ירוץ.

למשל, אם יש לי קריאת cURL, עדיף מאד לשים את מה שיש בקריאה הזו בתוך try-catch. כאשר catch יכול להכיל בתוכו רישום ללוג, הדפסת הודעת שגיאה למשתמש ואלמנטים נוספים.

לא צריך להכניס משפטי try&catch בכל מקום. לפעמים עדיף לתת לסקריפט לגווע במקרה של תקלה. לא תמיד אנו מעוניינים בהדפסה של הודעת שגיאה כלשהי. לפיכך עדיף לא להתפרע ולתקוע את המשפט הזה בכל מקום. מה שכן – בכל פעם שיש קריאה למשאב זה או אחר שהוא לא חלק אינהרנטי מהמערכת שלכם – עדיף להשתמש ב-try&catch.

פוסטים נוספים שכדאי לקרוא

גלילה לראש העמוד