2017-10-16 8 views
4

Mein Beispiel:Wie behandelt man Exception innerhalb eines anderen try catch Blocks?

class CustomException extends \Exception { 

} 

class FirstClass { 
    function method() { 
     try { 
      $get = external(); 
      if (!isset($get['ok'])) { 
       throw new CustomException; 
      } 

      return $get; 
     } catch (Exception $ex) { 
      echo 'ERROR1'; die(); 
     } 
    } 
} 

class SecondClass { 
    function get() { 
     try { 
      $firstClass = new FirstClass(); 
      $get = $firstClass->method(); 
     } catch (CustomException $e) { 
      echo 'ERROR2'; die(); 
     } 
    } 
} 

$secondClass = new SecondClass(); 
$secondClass->get(); 

Diese Rückkehr me "ERROR1", aber ich möchte "ERROR2" von Second erhalten.

In FirstClass-Block Versuch fangen sollte Fehler von external() -Methode behandeln.

Wie kann ich es machen?

Antwort

0

Anstatt eine Fehlermeldung auszugeben und den gesamten PHP-Prozess zu verwerfen, sollten Sie lieber eine weitere Ausnahme auslösen und einen globalen Ausnahmehandler registrieren, der die Ausnahmebehandlung für nicht behandelte Ausnahmen durchführt.

class CustomException extends \Exception { 

} 

class FirstClass { 
    function method() { 
     try { 
      $get = external(); 
      if (!isset($get['ok'])) { 
       throw new CustomException; 
      } 

      return $get; 
     } catch (Exception $ex) { 
      // maybe do some cleanups.. 
      throw $ex; 
     } 
    } 
} 

class SecondClass { 
    function get() { 
     try { 
      $firstClass = new FirstClass(); 
      $get = $firstClass->method(); 
     } catch (CustomException $e) { 
      // some other cleanups 
      throw $e; 
     } 
    } 
} 

$secondClass = new SecondClass(); 
$secondClass->get(); 

Sie könnten eine globale Exception-Handler registrieren set_exception_handler

set_exception_handler(function ($exception) { 
    echo "Uncaught exception: " , $exception->getMessage(), "\n"; 
}); 
Verwandte Themen