rammewerk/error-handler

用于管理和标准化PHP错误的简单类

v1.1.1 2023-11-24 13:49 UTC

This package is auto-updated.

Last update: 2024-09-24 15:42:41 UTC


README

一种简单灵活的方法来处理和管理工作中的PHP应用程序中的错误和异常。

  • PHP错误默认会被转换为异常。
  • 您可以注册多个闭包来处理错误。
  • 无其他依赖 - 小巧 - 仅1个文件。

安装

$ composer require rammewerk/error-handler

使用

错误处理器应在您的应用程序早期注册,以确保捕获可能从开始就出现的问题。如果注册较晚,初始错误可能无法捕获。早期注册还有助于结构化错误管理,便于调试和维护。

use Rammewerk\Component\ErrorHandler;

$errorHandling = new ErrorHandler();

$errorHandling->log( static function (\Throwable $e) {
    # Log your exceptions
});

$errorHandling->report( static function (\Throwable $e) {
    # Show the exception to your user.
});

logreport之间基本上没有区别。首先调用日志闭包,然后调用报告。因此,您可以在稍后添加不同的log处理程序,即使之前注册的report闭包可能用于退出PHP。

log闭包的调用顺序与注册顺序相同。reports的调用顺序相反。因此,您可以在应用程序的早期添加一条通用消息,然后在稍后添加新的报告来处理不同的场景,处理程序会调用“通用”错误报告。

为什么使用Rammewerk ErrorHandler?

PHP要么抛出异常(这些异常旨在被捕获),要么打印错误(这些错误通常无法恢复)。但不必同时处理异常和错误,我们将错误转换为异常,这样您就只需处理异常。不再需要@file_get_contents,只需简洁的try/catch。

未捕获的异常将被传递给您的logreport闭包。

许多其他框架或库都更加先进,并带有大量功能。这个ErrorHandler设计简单 - 您决定如何处理未捕获的异常和错误。

提示

  • 尽早将ErrorHandler类添加到您的应用程序中。
  • 在任何您想添加logreport闭包的地方添加它们。只有当异常在注册的闭包之后发生时,ErrorHandler才会调用这些闭包。因此,尽早添加logreport闭包。
  • 您可以为多个logreport闭包。首先调用log,然后调用report闭包。
  • 如果您想删除之前注册的闭包 - 在logreport中将第二个参数设置为true。例如:$error->log( $closure, true )。如果要在稍后的脚本中替换调用其他依赖项之后的日志,这可能会很有用。

示例

use Rammewerk\Component\ErrorHandler;

CONST DEBUG_MODE = true;

$errorHandler = new ErrorHandler();

/** Log latest exception to JSON file */
$errorHandler->log( static function (\Throwable $e) {
  file_put_contents( 'latest_error.json', json_encode($e->getMessage()) );
});

/** Show default 500 error page */
$errorHandler->report( static function () {
    http_response_code( 500 );
    echo file_get_contents( "errors/500.html" );
    die;
} );

/** 
 * Show error details if DEBUG_MODE. 
 * Second argument here (true) is used to reset the report list.
 * report closures 
 */
if( DEBUG_MODE ) { 
  $errorHandler->report( function (\Throwable $e) {
      $debug = new \CustomDebugClass();
      $debug->exception($e);
      die;
  }, true);
}

处理不同类型的异常

reportlog闭包处理任何Throwable异常。为了区分异常类型,在闭包中包含一个instanceOf检查。

$errorHandling->report( function (\Throwable $e) {
    if( $e instanceof \MyCustomException) ) {
        die('MyCustomException was thrown');
    }
  } );