לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #1  
ישן 04-10-2007, 11:17
  משתמש זכר yoavmatchulsky yoavmatchulsky אינו מחובר  
 
חבר מתאריך: 15.08.06
הודעות: 1,561
שלח הודעה דרך ICQ אל yoavmatchulsky שלח הודעה דרך MSN אל yoavmatchulsky Facebook profile
טיפול בExceptions

המערכת שלי בנויה על Includeים, ככה שיש קובץ מרכזי שלפי פרמטר קורא לקובץ אחר
הוא עושה את זה עם אקספשנס בסגנון הזה:
קוד PHP:
 try
{
    include (
$template['action'] . '.php');
}
catch (
CTException $e)
{
    
$msg $e->getMessage();
    if (!empty(
$msg))
        
$statusMessage $e->getMessage();
    switch (
$e->getCode()) {
        case 
0:
            
$content '';
            include 
'menu.php';
            break;
        case 
1:
            break;
        case 
2:
            
$content '';
            include 
$e->getAction() . '.php';
            break;
    }        


כאשר הגדרתי את CTException כמחלקה שנורשת מException והוספתי לה פרמטר של action.

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

חג שמייח ותודה למגיבים
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #6  
ישן 05-10-2007, 09:18
צלמית המשתמש של netaneldj
  netaneldj netaneldj אינו מחובר  
 
חבר מתאריך: 01.05.06
הודעות: 7,861
Facebook profile
בתגובה להודעה מספר 5 שנכתבה על ידי yoavmatchulsky שמתחילה ב "יצירת אקספשן נועד להודיע..."

נניח והרעיון שלך היה מעולה.

כשאתה יוצר את ה include אתה בעצם מכניס אותו לתוך לולאה של switch, ודבר כזה יכול להגביל אותך בשלב מסויים.

נגיד ואתה משתמש ב break.

יכולה להיווצר נגישות בין לולאת ה switch והקוד החדש שלך.

אבל אם אתה מתעקש להמשיך ברעיון שלך, יש דרך (שאף פעם לא ניסיתי) אבל אני חושב שהיא תעבוד:

קוד PHP:
<?
try {
 
 switch(rand(0, 2)) {
  
 case 0:
  throw new Exception('regerror', 0);
 case 1:
  throw new Exception('othererror', 1);
 case 2:
  throw new Exception('extendederror', 2);
 }
 
}
// primary exceptions catch
catch (Exception $e) {
 
 switch($e->getCode()) {
  
  case 0:
   try {
    throw new Exception('regerror', 0);
    
   }
   //  inner catch
   catch (Exception $b) {
    echo $b->getMessage();
   }
   break;
  case 1:
   try {
    throw new Exception('othererror', 1);
    
   }
   //  inner catch
   catch (Exception $b) {
    echo $b->getMessage();
   }
   break;
  default:
   try {
    throw new Exception('extendederror', 2);
   
   }
   //  inner catch
   catch (Exception $b) {
    echo $b->getMessage();
    
   }
   
 }
 
}
?>
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #7  
ישן 05-10-2007, 13:46
  משתמש זכר yoavmatchulsky yoavmatchulsky אינו מחובר  
 
חבר מתאריך: 15.08.06
הודעות: 1,561
שלח הודעה דרך ICQ אל yoavmatchulsky שלח הודעה דרך MSN אל yoavmatchulsky Facebook profile
בתגובה להודעה מספר 6 שנכתבה על ידי netaneldj שמתחילה ב "נניח והרעיון שלך היה מעולה. ..."

לא נראה לי שהבנת אותי
הקוד שלך יעבוד (אמור לעבוד לפחות) רק במקרה של אקספשן בתוך אקספשן. ומה אם קורה שיש 3?

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

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

ובקשר להודעה שלך מקודם, אם על כל אקספשן אתה עושה die, אז למה אתה זורק אקספשן ולא עושה die במקום?
כל הקטע בזריקת אקספשן זה שתוכל לתפוס אותו ולתקן את התקלה (או להודיע למשתמש הקצה)
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #9  
ישן 05-10-2007, 17:30
  משתמש זכר yoavmatchulsky yoavmatchulsky אינו מחובר  
 
חבר מתאריך: 15.08.06
הודעות: 1,561
שלח הודעה דרך ICQ אל yoavmatchulsky שלח הודעה דרך MSN אל yoavmatchulsky Facebook profile
בתגובה להודעה מספר 8 שנכתבה על ידי netaneldj שמתחילה ב "למה שישלחו 3 exceptions?"

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

code FOLLOWING the statement

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

עוד פעם, תחשוב על זה כאקספשן לוגי ולא אקספשן פיזי שתלוי בכשלון חומרה (למרות שזה גם בטיפול)


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

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 06:45

הדף נוצר ב 0.07 שניות עם 12 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר