מדריך ל try,throw,catch ב PHP
מה זה בכלל ?
עם פקודות אלה בד"כ אנחנו משיגים שגיאות בקוד (שאנו מזינים) כל אחד מהם עושה את הדבר הבא :
- throw : "לזרוק" שגיאה שאתה מגדיר
-try : לנסות תוכנית של קוד
-catch : "לתפוס" את השגיאה
במדריך הזה אנחנו נלמד אך ורק את הבסיס של זה, לפקודות האלה יש שימושים רבים והרבה ללמוד לכן אם תבינו את הבסיס תוכלו להמשיך למתקדם בקלות.
למה זה שימושי ?
כאשר מתמשים בזה הקוד והשגיאות הרבה יותר נקיות, מסודרת ואתה תוכל לדבג את התוכנית בקלות וביעילות.
מגניב ! אז זה ממש שימושי, אבל אמ... איך משתמשים בזה ?
בשביל "לזרוק" שגיאה בשפת PHP, אנו כותבים את הקוד הבא :
קוד:
throw new Exception(XXX);
- ב XXX אנחנו כותבים את השגיאה.
לדוגמא בסיסית נבדוק אם 1 שווה ל 2 (אני כמעט בטוח שלא) ואם לא זה "יזרוק" שגיאה :
קוד:
if (1 != 2)
throw new Exception('Gil');
עכשיו אם נריץ את זה, זה לא יפעל ויחזיר לנו ERROR מוזר, אז בשביל שזה יעבוד אנחנו נצטרך להשתמש ב TRY ו CATCH,
מה ששמים ב TRY זה הקוד שאנחנו רוצים לנסות, ואז אם הוא זורק שגיאה זה יעבור ל CATCH.
נעשה זאת ככה :
קוד:
try {
if (1 == 2) {
echo '1 is equal to 2 ';
} else {
throw new Exception('Error : 1 doesent equal to 2');
}
} catch (){
}
אבל חכה ! זה גם לא פעול !
זה לא פועל בגלל שעדיין ב CATCH לא קיבלנו את הזריקה ולכן זה יחזיר לנו ERROR,
בשביל להוריד את התקלה הזאת, בתוך הסוגרים של ה CATCH אנו נכניס את המשפט הבא :שזה עושה, שכאשר יתקבל התקלה, זה יכניס את הפרטים שלה לתוך משתנה בשם $ex
*שימו לב - אפשר לקרוא למשתנה איך שנרצה, אך מומלץ ex*
אז למשל catch יכול להראות ככה :
קוד:
catch (Exception $ex){
}
טוב אז אני חושב שאני הבנתי, בהתחלה זרקנו בעיה, אחרי זה שמנו אותה בתוך TRY ו CATCH וקיבלנו אותה, אבל .. איך אני מדפיס את הבעיה ?!?
בשביל להדפיס את הבעיה אנחנו נכתוב את שם המשתנה שלנו (ששמנו בו את התקלה - במקרה שלנו ex)-> ואז נשים :מה שזה עושה זה לוקח את התוכן של הבעיה שהגדרנו ב THROW למשל אם זרקנו את הבעיה הזאתי :
קוד:
throw new Exception('Error : 1 doesent equal to 2');
אז אם נשתמש במה שלמדנו עכשיו הערך של EX יהיה שווה ל Error : 1 doesent equal to 2 :הנה כל הקוד של ה CATCH כאשר אני מדפיס את הבעיה :
קוד:
catch (Exception $ex){
echo 'Error :'. $ex->getMessage();
}
וכל הקוד מההתחלה :
קוד:
try {
if (1 == 2) {
echo '1 is equal to 2 ';
} else {
throw new Exception('Error : 1 doesent equal to 2');
}
} catch (Exception $ex){
echo 'Error :'. $ex->getMessage();
}
טוב אז כדאי להיות בטוחים שכולם יצאו מפה עם החיוך על הפנים עם התחושה שאני הבנתי את זה ! אז אני יעשה דוגמא יותר מוחשית שאולי תעזור לכם להבין את זה יותר טוב.
בתוכנית זאת אנו נגדיר שני משתנים, נבדוק אם אחד מהם 0, אם כן נזרוק שגיאה, ואם לא אנו נחלק אותם אחד בשני.
אז בוא נתחיל ונכין את שני המשתנים :
קוד:
$num1 = 16;
$num2 = 4;
עכשיו אנחנו נכין את ה TRY ו CATCH שלנו כדי ש ב TRY אנחנו נבדוק אם אחד מהמשתנים הוא 0 ואם הוא כן זה יזרוק שגיאה ל CATCH :
אחרי זה, אנחנו נכין תנאי שאם אחד מהמשתנים שווה ל 0 זה יזרוק בעיה, ואם לא זה יחלק אותם וידפיס את זה על המסך.
קוד:
try {
if ($num1 == 0 || $num2 == 0) {
throw new Exception('You cannot divide with 0');
} else {
echo 'the division of num1 with num2 is : '.$num1 / $num2;
}
}
עכשיו כל מה שכתבנו עד עכשיו ביחד :
קוד:
$num1 = 16;
$num2 = 4;
try {
if ($num1 == 0 || $num2 == 0) {
throw new Exception('You cannot divide with 0');
} else {
echo 'the division of num1 with num2 is : '.$num1 / $num2;
}
} catch (){
}
השלב האחרון שלנו הוא להכין את ה CATCH, בסוגרים אנו נשים : Exception $ex כדי לקחת את הבעיה לתוך המשתנה EX ואחרי זה בתוך ה CATCH אנו נדפיס אותה בעזרת getMessage() :
קוד:
catch (Exception $ex){
echo 'Error :'. $ex->getMessage();
}
כמובן עכשיו כל הקוד מההתחלה ביחד עם הערות :
קוד:
// define numbers
$num1 = 16;
$num2 = 4;
try {
if ($num1 == 0 || $num2 == 0) { // if statment checks if one of them is 0
throw new Exception('You cannot divide with 0'); // throwing a new expetion
} else { // else
echo 'the division of num1 with num2 is : '.$num1 / $num2; // priting the division
}
} catch (Exception $ex){ // starting to catch the error
echo 'Error :'. $ex->getMessage(); // printing the error
}
וזהו ! אני מקווה שהבנתם הכל, אם יש משהו לא מובן אשמח אם תשאלו כאן ובשמחה אני יענה.
עבדתי על זה הרבה זמן, אשמח לתגובות,
בהצלחה ! 
כל הזכויות שמורות לי - אין להעתיק ללא ראשות