Uncaught Exception

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Uncaught Exception

    Hallo !
    Ich probiere gerade ein bisschen mit Exceptions herum und habe ein Problem damit, bitte schauts euch mal das an.
    PHP-Code:
    <?php
    function showError($exception) {    
            if(!
    is_object($exception)) {
                throw new 
    BgException(
    '<i>'.__FUNCTION__.'()</i> in '.__FILE__.' hat einen falschen Datentyp bekommen.');
            }
            try {
                
    $errorMsg 'Testnachricht';
                
    ?>
                <table>
                 <tr>
                  <td>Fehler vom Typ 
    <i><?php echo $exception->getTyp(); ?></i></td>
                 </tr>
                 <tr>
                  <td><?php echo $errorMsg?></td>
                 </tr>
                </table>
                <?php
            
    }
            catch (
    BgException $BgException) {
                    
    trigger_error($BgException->getMessage(), E_ERROR);
            }
        }

  • #2
    bitte lauffähigen code zeigen, damit der zusammenhang deutlich wird, wie du die funktion benutzst.

    Kommentar


    • #3
      Ok, sorry.
      PHP-Code:
      <?php
          
      class BgException extends Exception {
              protected 
      $errorTyp;
              protected 
      $errorLevel;
              
              public function 
      __construct($errorLevel$errorMsg 'Keine Nachricht gegeben'
      $errorCode 0$errorTyp 'Allgemein') {
                  
      parent::__construct($errorMsg$errorCode);
                  
      $this->errorTyp $errorTyp;
                  
      $this->errorLevel $errorLevel;
              }
              public final function 
      getTyp() {
                  return 
      $this->errorTyp;
              }
              public final function 
      getLevel() {
                  return 
      $this->errorLevel;
              }
          }
      ?>
      Die Funktion soll mir einfach nur den Fehler schön geordnet in einer Tabelle anzeigen. Wenn der Funktion ein Objekt übergeben wird, alles OK, sonst soll es zum Fehler kommen.
      PHP-Code:
      <?php
      public function login($user$passwort) {
                  
      // Überprüfung, ob Daten Stimmen
                  
      if($this->loggedIn) {
                      
      // Session eintragen
                  
      }else{
                      throw new 
      LoginException(1'Login fehlgeschlagen.'1,
       
      'Login');
                  }
              }        
      //...
      //...
      //...
      try {
              
      $user = new User();
              
      $user->login('Test''test');
          }catch (
      LoginException $LoginException) {
              
      showError($LoginException);
          }
      ?>

      Kommentar


      • #4
        ...gut, und jetzt noch eine klare problembeschreibung (samt fehlermeldungen).

        Kommentar


        • #5
          Tut, mir leid:
          Die Fatal error: Uncaught exception 'BgException'
          EDIT:
          Fatal error: Uncaught exception 'BgException'...

          Kommentar


          • #6
            Re: Uncaught Exception

            Original geschrieben von dibsi
            Ich probiere gerade ein bisschen mit Exceptions herum und habe ein Problem damit, bitte schauts euch mal das an.
            exceptions, die innerhalb des try-blocks geworfen werden, werden im passenden catch-block abgefangen.
            in deiner funktion ist dies nicht der fall, du wirfst eine exception außerhalb von try und die wird nicht durch catch abgefangen: "Uncaught exception"

            Kommentar


            • #7
              Re: Uncaught Exception

              Original geschrieben von dibsi
              PHP-Code:
              if(!is_object($exception)) 
              wenn du schon den parameter auf 'object' überprüfst, dann richtig. du erwartest schließlich ein exception object:
              PHP-Code:
              if(!$exception instanceof Exception

              Kommentar


              • #8
                3DMax, eigentlich soll die exception (wenn ich das richtig verstehe) nach außen gereicht werden und erst dann fatal error produzieren, wenn sie auf der obersten ebene nicht abgefangen wird. so würde ich das z.b. von java erwarten.. leider fehlt mir momentan die möglichkeit, einen testlauf zu starten.

                http://de.php.net/manual/en/language...ions.php#52612 - kommentar von "jd at wuputah dot com".
                Zuletzt geändert von penizillin; 03.11.2006, 00:38.

                Kommentar


                • #9
                  dibsi: versuch doch mal, mit ...catch(Exception $e)... eine allgemeine exception abzufangen, vielleicht lässt sich dich etwas wissen.

                  im grunde kann 3dmax jedoch recht haben - die exception bgexception (die besagen soll: parameter von falschem typ) wird bei dir nirgendwo gefangen...
                  Zuletzt geändert von penizillin; 03.11.2006, 00:40.

                  Kommentar


                  • #10
                    Original geschrieben von penizillin die exception bgexception (die besagen soll: parameter von falschem typ) wird bei dir nirgendwo gefangen...
                    mein reden
                    aber ich finde den ansatz von dibsi schon komisch - es wird eine exception gefangen und dann explizit die funktion showError() mit dem exception object aufgerufen.
                    diese funktion prüft dann, ob der parameter ein objekt ist und schmeißt dann eventuell wieder eine exception (die bekanntlich nicht gefangen wird). warum der umweg über diese funktion und nicht gleich die exception fangen, direkt im script oder alles andere außerhalb?

                    PHP-Code:
                    try
                     {
                      
                    // Ganz viele Zeilen Script
                      // Spezielle Ausnahmen können hier abgefangen werden, z.B.:
                      
                    try
                       {
                        
                    $user->login('user''pass')
                       }
                      catch(
                    LoginException $le)
                       {
                        
                    $user->showLoginForm($le->getMessage());
                       }
                     }
                    catch(
                    Exception $e)
                     {
                      
                    // Alle unbehandelte Ausnahmen werden hier gefangen
                      
                    echo $e->__toString();
                     } 

                    Kommentar

                    Lädt...
                    X