Größtenteils wurde der Code aus einem PHP-Doku-Kommentar übernommen. Ich habe lediglich den Teil entfernt, der keinen Sinn macht, da benutzer-definierte Fehlerbehandlungsroutinen nicht für alle Typen von Fehlern benutzt werden kann. Siehe auch http://php.net/manual/de/function.set-error-handler.php
Einfach den Code in ein Script einfügen (bpsw. Errorhandler.php) und dieses dann in den eigenen Code mittels include() oder require() einbinden. Sobald ein E_XXXX-Fehler auftritt (z.B. eine Notice) wird statt dem Fehler im Browser auszugeben eine Exception geworfen, was dem OOP-Gedanken entspricht.
Exceptions werden dann regulär über try-catch abgefangen:
Einfach den Code in ein Script einfügen (bpsw. Errorhandler.php) und dieses dann in den eigenen Code mittels include() oder require() einbinden. Sobald ein E_XXXX-Fehler auftritt (z.B. eine Notice) wird statt dem Fehler im Browser auszugeben eine Exception geworfen, was dem OOP-Gedanken entspricht.
PHP:
<?php
/**
* Errorhandler.php
* @author elad dot yosifon at gmail dot com
* @see http://php.net/manual/de/function.set-error-handler.php#112881
* Provides an exception based error handling
*/
/** Exceptions derived from ErrorException **/
class WarningException extends ErrorException {}
class NoticeException extends ErrorException {}
class UserErrorException extends ErrorException {}
class UserWarningException extends ErrorException {}
class UserNoticeException extends ErrorException {}
class StrictException extends ErrorException {}
class RecoverableErrorException extends ErrorException {}
class DeprecatedException extends ErrorException {}
class UserDeprecatedException extends ErrorException {}
/**
* The error handler
* @param number $err_severity The level or error
* @param string $err_msg The message of the error
* @param string $err_file The file where the error has occured
* @param number $err_line The line where the error has occured
* @param array $err_context Detailed error description
*/
function application_error_handler($err_severity, $err_msg, $err_file, $err_line, array $err_context)
{
// error was suppressed with the @-operator
if (0 === error_reporting()) { return false;}
switch($err_severity)
{
case E_WARNING: throw new WarningException ($err_msg, 0, $err_severity, $err_file, $err_line);
case E_NOTICE: throw new NoticeException ($err_msg, 0, $err_severity, $err_file, $err_line);
case E_USER_ERROR: throw new UserErrorException ($err_msg, 0, $err_severity, $err_file, $err_line);
case E_USER_WARNING: throw new UserWarningException ($err_msg, 0, $err_severity, $err_file, $err_line);
case E_USER_NOTICE: throw new UserNoticeException ($err_msg, 0, $err_severity, $err_file, $err_line);
case E_STRICT: throw new StrictException ($err_msg, 0, $err_severity, $err_file, $err_line);
case E_RECOVERABLE_ERROR: throw new RecoverableErrorException ($err_msg, 0, $err_severity, $err_file, $err_line);
case E_DEPRECATED: throw new DeprecatedException ($err_msg, 0, $err_severity, $err_file, $err_line);
case E_USER_DEPRECATED: throw new UserDeprecatedException ($err_msg, 0, $err_severity, $err_file, $err_line);
default: throw new ErrorException ($err_msg, 0, $err_severity, $err_file, $err_line);
}
}
set_error_handler("application_error_handler", E_ALL | E_STRICT);
Exceptions werden dann regulär über try-catch abgefangen:
PHP:
<?php
require 'Errorhandler.php';
try
{
echo $_GET['undefinierte_get_variable'];
}
catch(Exception $ex)
{
printf("%s: %s<pre>%s</pre>", get_class($ex), $ex->getMessage(), $ex->getTraceAsString());
}