Ausnahmebehandlung mit PHP

Rainer Schulz » 01. Januar 2012 um 23:49 Uhr

0 Kommentare

PHP 

Vorwort

In den letzten Wochen habe wieder etwas mehr Zeit gefunden mich mit PHP zu beschäftigen. Daher werde ich in den nächsten Wochen ein paar von mir erstellte PHP-Klassen vorstellen. Welche das im Einzelnen sein werden, kann ich noch nicht sagen. In meinem heutigen Beitrag werde ich eine Exceptionhandlerklasse vorstellen.

Die Exceptionhandlerklasse

Die Exceptionhandlerklasse ist dafür gedacht, unbehandelte Exceptions (Ausnahmen) abzufangen und auszugeben. Bei Projekten, welche schon online sind, würde ich aber dazu raten, die Exceptions nicht auszugeben, sondern lieber in einer Datei zu loggen.

Exceptionhandlerklasse:
/**
 * Klasse zum abfangen von unbehandelten Exceptions.
 * 
 * @abstract
 * @author Rainer Schulz <‑‑‑‑‑‑@‑‑‑‑‑‑‑>
 * @link http://raischblog.de/
 * @copyright 2011 ‑ Rainer Schulz
 * @license CC BY‑NC‑SA 3.0 <http://creativecommons.org/licenses/by‑nc‑sa/3.0/>
 * @version 1.0 31/12/2011 18:06
 */
abstract class RsExceptionHandling
{
    private static $fullPath;

    public static function init( $trace = null, $fullPath = null )
    {
        self::$fullPath = $fullPath === false ? false : null;

        set_exception_handler( array(
            'RsExceptionHandling',
            $trace === true ? 'exceptionHandlerWithTrace' : 'exceptionHandler'
        ) );
    }

    public static function exceptionHandler( $e )
    {
        echo self::exceptionGetInfos( $e );
    }

    public static function exceptionHandlerWithTrace( $e )
    {
        echo self::exceptionGetInfos( $e );
        echo self::exceptionGetTrace( $e );
    }

    private static function exceptionGetInfos( $e )
    {
        $file  = self::$fullPath === false ?
                 basename( $e‑>getFile() ) :
                 $e‑>getFile();
        $class = get_class( $e );
        $nl    = "\r\n";

        return "<h1>Caught exception =&gt; $class</h1>$nl<p>Thrown in <strong".
               ">$file</strong> on line <strong>{$e‑>getLine()}</strong>.</p>".
               "$nl<p><strong>Message:</strong> {$e‑>getMessage()}<br /><stro".
               "ng>Code:</strong> {$e‑>getCode()}</p>";
    }

    private static function exceptionGetTrace( $e )
    {
        $traceArray = $e‑>getTrace();
        $nl         = "\r\n";
        $trace      = $nl;

        foreach ( $traceArray as $key => $content ) {
            $class    = '';
            $function = '';

            if ( !empty( $content['class'] ) ) {
                $class = " at class <strong>{$content['class']}</strong>";
            }

            if ( !empty( $content['function'] ) ) {
                $function = " in function <strong>{$content['function']}()".
                            '</strong>';
            }

            $file = self::$fullPath === false ?
                    basename( $content['file'] ) :
                    $content['file'];

            $trace .= "<p>#$key in <strong>$file</strong> on line <strong>".
                      $content['line']."</strong>$class$function</p>$nl";
        }

        return $trace;
    }
}

Initialisieren der Klasse

Die Klasse wird über die Methode init() initialisiert. Diese Methode kann man mit verschiedenen Parametern aufrufen.

Der parameterlose Aufruf der Methode bewirkt, dass nur die Datei, die Fehlermeldung und die Fehlernummer ausgegeben werden.
RsExceptionHandling::init();

Der Aufruf mit dem einzelnen Parameter true bewirkt, dass die Datei, die Fehlermeldung, die Fehlernummer und der komplette Pfad der Exception ausgegeben werden.
RsExceptionHandling::init( true );

Beim Aufruf der Methode mit false als zweiten Parameter bewirkt, dass keine kompletten Dateipfade, sondern nur der Dateiname ausgegeben wird.
RsExceptionHandling::init( true/null, false );

Abschließendes

Bei Anregungen oder Fragen zur Klasse benutzt einfach die Kommentarfunktion.

 

Diese Artikel könnten dich auch interessieren

1. Alter eines Zeitstempels mit PHP ermitteln » 04. Mai 2011
2. Optimierung des Blogs mit PHP » 18. April 2011
3. Objektorientierte Programmierung » 29. Oktober 2010
4. Grundlagen der Programmierung » 26. Oktober 2010
5. Meine PHP Templateklasse. » 18. Oktober 2010

Diesen Beitrag teilen

Twitter Facebook Delicious Digg Bei allen Services (Mister Wong, Yigg, Infopirat etc.)

  1. 0 Kommentare zum Beitrag.

  2. 1. von Console am 09. Dezember 2016 um 14:27:18 Uhr.

    Noch keine Kommentare vorhanden.

  3. Schreib einen Kommentar.
  4. Kommentare sind deaktiviert.