kegiphp-error-handler

此软件包最新版本(0.1.7)没有可用的许可证信息。

0.1.7 2018-10-17 18:11 UTC

This package is not auto-updated.

Last update: 2024-09-28 20:03:32 UTC


README

PHP7; 面向对象错误处理器。这是一个alpha版本

#简介

该错误处理器检测PHP错误,将它们转换为异常,并允许您轻松处理。此外,此库可选地记录错误(接受PSR接口)。

安装

使用Composer安装此库

composer require kegi/php-error-handler

调试模式

默认禁用

  • 启用调试时,错误会正常显示(您仍然会收到通知)。
  • 禁用调试时,所有错误都会被隐藏,您会收到通知,需要您返回错误消息。

严格模式

默认禁用

严格模式会将所有非致命错误转换为致命错误。

复杂的错误处理运行时

如果检测到致命错误,您可以执行复杂的代码。例如,您可以调用错误控制器,根据用户的语言设置从模板生成响应...

如果在处理此致命错误时发生另一个致命错误...(例如,您的应用程序核心的致命错误),您将收到不可恢复错误发生的通知,并且您将能够返回错误消息(例如,返回静态错误HTML页面的内容)。

#如何在项目中实现

  1. 在项目的开头实例化PhpErrorHandler。

  2. 您为所需的错误级别(非致命、致命和不可恢复)提供了一个可调用的函数。

  3. 您的项目未捕获的异常将自然地进入您的致命错误方法。您不再需要以不同的方式处理它们。

#示例

<?php

namespace Your\Project\Bootstrap;

use KeGi\PhpErrorHandler\PhpErrorHandler;
use KeGi\PhpErrorHandler\PhpFatalErrorException;

class App
{

    public function __construct() {
        
        /*instanciate the error handler*/
        
        (new PhpErrorHandler())
        ->setDebug(false) //prod
        #->setErrorCallback([$this, 'handleError']) //most projects don't need this
        ->setFatalErrorCallback([$this, 'handleFatalError'])
        ->setUnrecoverableErrorCallback([$this, 'handleUnrecoverableError']);
    }
    
    public function run()
    {
        //run your application...
        
        throw new \Exception('Uncaught exception');
        //or...
        trigger_error('Uncaught error', E_USER_ERROR);
    }
    
    public function handleFatalError(PhpFatalErrorException $phpFatalErrorException)
    {
        
        // you can check the php error like this :
        
        if($phpFatalErrorException->getCode() === E_PARSE){
            //parse error occured...
        }
        
        // you would normally call your router and emit a response
        return 'A fatal occured occured...';
    }
    
    public function handleUnrecoverableError()
    {
        //you could include a static error page
        //eg. return include '/static/server-error.html';
        
        return 'A very bad error occured';
    }
}

#命令行(CLI)

命令行中的错误也将被处理。

  • 在发生致命错误的情况下,CLI中的输出缓冲区不会被清除。(没有输出缓冲区)
  • 在发生第二级致命错误的情况下,CLI中将不会使用不可恢复回调。

#单元测试 即将推出

#工作流程 alt tag

#输出缓冲区 这是一个好习惯,在准备好后构建一个响应对象并发出它,大多数PHP路由器都会这样做。如果您的项目直接生成内容(例如,echo、print、var_dump...),这也会被处理。

如果禁用了调试模式,发生致命错误时,已生成的内容将被丢弃,因此只能看到我们的错误响应。

在错误回调中,您可以直接输出您的消息或返回一个字符串。

#参数 ##构造函数 如果您不希望库更改PHP错误设置(ini_set和error_reporting),请将构造函数中的$setErrorDisplay设置为false。

__construct(
    bool $debug = false,
    bool $strict = false,
    $errorCallback = null,
    $fatalErrorCallback = null,
    $unrecoverableErrorCallback = null,
    $errorLogger = null,
    bool $setDisplayErrors = true
    )

##调试模式 设置/取消设置调试模式。(默认:false

setDebug(bool $debug)
hasDebug() : bool

##严格模式 设置/取消设置严格模式。启用严格模式后,非致命PHP错误(如E_NOTICE)将被转换为致命错误。(默认:false

setStrict(bool $strict)
isStrict() : bool

##错误回调 设置/取消设置错误回调。这将调用每个PHP(非致命)错误。大多数项目不需要此功能。

setErrorCallback([mixed $callable])
getErrorCallback() : mixed

##致命错误回调 设置/取消设置致命错误回调。在发生致命错误时将调用此回调。您可以打印或返回输入。

setFatalErrorCallback([mixed $callable])
getFatalErrorCallback() : mixed

##不可恢复错误回调 设置/取消设置致命错误回调。在发生从“fatalErrorCallback”或未定义致命错误回调的致命错误时将调用此回调。您可以打印或返回输入。

setUnrecoverableErrorCallback([mixed $callable])
getUnrecoverableErrorCallback() : mixed

##错误日志器 设置/取消设置错误日志器。ErrorLogger需要实现PSR日志接口。注意:日志在启用或禁用调试模式时都会启用。

setErrorLogger([LoggerInterface $errorLogger])
getErrorLogger() : mixed

##取消 这将取消错误处理器。一旦取消,就不能重新启用它。您仍然可以读取处理器(获取器)的值。尝试编辑处理器(设置器)的值将抛出异常。

cancel()
isCancelled() : bool