Ausnahmebehandlung mit PHP

01Jan20120

Rainer Schulz » vor Ewigkeiten am 01. Januar 2012 um 23:49 » 3157 Klicks » 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.

 

Schlagwörter »                

Über den Autor

 

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.

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

Kommentare zum Artikel

  • #1 » von Console » am 21. August 2017 um 14:15

    Noch keine Kommentare vorhanden.

Kommentar schreiben

markierte (*) Felder sind Pflichtfelder

E-mail wird nicht veröffentlicht

nur "http://" Adressen sind erlaubt