It wraps errors and exception handling logic. Any exceptions or errors (even parse and fatal ones) are handled in the same way.
The lib also provides two custom exceptions:
FatalErrorException- fatal errors i.e.E_ERROR,E_PARSE,E_CORE_ERROR,E_COMPILE_ERRORSuppressedErrorException- recoverable errors which comes from the code under@
It is completely covered with phpunit tests.
Composer is a prefered way to install it.
php composer.phar require fp/universal-error-catcherWhen you are asked for a version constraint, type * and hit enter.
The example shows the simplest way of sanding an email on each error.
<?php
$catcher = new UniversalErrorCatcher_Catcher();
$catcher->registerCallback(function(Exception $e) {
$to = 'admin@example.com';
$subject = 'Error: '.$e->getMessage();
$body = (string) $e;
mail($to, $subject, $body);
});
$catcher->start();
// after the start method is called everything is under your control.Let's imagine we try to call a method which does not exist. In this situation php will raise a fatal error.
<?php
$catcher = new UniversalErrorCatcher_Catcher();
$catcher->registerCallback(function(Exception $e) {
$e instanceof FatalErrorException //true
});
$catcher->start();
$anObject->notExistMethod();Or the other situation when we run out of memory. In this case the catcher will gladly free some resorved memory for us.
<?php
$catcher = new UniversalErrorCatcher_Catcher();
$catcher->registerCallback(function(Exception $e) {
$e instanceof FatalErrorException //true
});
$catcher->start();
ini_set('memory_limit', '1K');
str_repeat('foobar', PHP_INT_MAX);By default php errors (warnings and so on) wouldn't be thrown but passed to callback in background.
<?php
$catcher = new UniversalErrorCatcher_Catcher();
$catcher->registerCallback(function(Exception $e) {
$e instanceof ErrorException //true
});
$catcher->start();
echo $undefinedVariable;
echo 'the script continue to work. This message will be outputed';You can change this by converting all errors to exception. just set setThrowRecoverableErrors to true.
<?php
$catcher = new UniversalErrorCatcher_Catcher();
$catcher->setThrowRecoverableErrors(true); // false by default
$catcher->registerCallback(function(Exception $e) {
$e instanceof ErrorException //true
});
$catcher->start();
echo $undefinedVariable;
echo 'the exception is throw. It will never be outputed';The errors behaind @ (i.e suppressed) are also caught.
Change setThrowSuppressedErrors to true if you want throw them.
<?php
$catcher = new UniversalErrorCatcher_Catcher();
$catcher->registerCallback(function(Exception $e) {
$e instanceof SuppressedErrorException //true
});
$catcher->start();
@trigger_error('supressed warning', E_USER_WARNING);
echo 'the script continue to work. This message will be outputed';Any not caught exceptions will be passed to you:
<?php
$catcher = new UniversalErrorCatcher_Catcher();
$catcher->registerCallback(function(Exception $e) {
$e instanceof LogicException //true
});
$catcher->start();
throw new LogicException('something strange happened. I am scared.');
echo 'the exception is throw. It will never be outputed';