一个用于更好地处理PHP错误和异常的库。

v1.1.0 2024-06-26 21:03 UTC

This package is auto-updated.

Last update: 2024-09-26 21:39:57 UTC


README

一个用于更好地处理PHP错误和异常的库。

支持的PHP版本

安装

可以通过在您的 composer.json 文件的 require 部分包含以下条目将库包含到您的项目中:"webfiori/err":"*"

功能

  • 将所有PHP错误转换为异常。
  • 能够创建自定义的异常处理器。
  • set_exception_handler() 函数提供面向对象抽象。

使用方法

库中有两个主要的类,开发者将与之交互。第一个是 Handler 类,第二个是 AbstractExceptionHandler 类。第一个类是库的核心,用于设置自定义异常处理器。第二个类用于实现自定义异常处理器。由于库将所有PHP错误转换为异常,因此开发者无需设置自定义错误处理器。

实现自定义异常处理器

设置自定义异常处理器的第一步是实现它。实现自定义处理器是一个简单的过程。开发者只需扩展 AbstractExceptionHandler 类并实现其中一个抽象方法。方法 AbstractExceptionHandler::handle() 用于处理异常。开发者可以访问抛出的异常的属性,以便正确处理它。库中提供了一个默认的异常处理器,可以作为实现自定义处理器的良好示例。

<?php
namespace webfiori\error;

class DefaultExceptionsHandler extends AbstractExceptionHandler {
    public function __construct() {
        parent::__construct();

        //Set handler name. Each registered handler must have a unique name.
        $this->setName('Cool Handler');

        //Sets the priority of the handler. Larger means that it has higher priority.
        $this->setPriority(100);
    }
    /**
     * Handles the exception.
     */
    public function handle() {
        echo '<pre>';
        echo 'An exception was thrown at '.$this->getClass().' line '.$this->getLine().'.<br>';
        echo 'Exception message: '.$this->getMessage().'.<br>';
        echo 'Stack trace:<br>';
        $trace = $this->getTrace();
        
        if (count($trace) == 0) {
            echo '&lt;Empty&gt;';
        } else {
            $index = '0';

            foreach ($trace as $entry) {
                echo '#'.$index.' '.$entry.'<br>';
                $index++;
            }
        }
        echo '</pre>';
    }

    public function isActive(): bool {
        //Activate or deactivate the handler based on conditions.
        return true;
    }

    public function isShutdownHandler(): bool {
        //Set the handler as shutdown handler (errors after processing)
        return false;
    }
}

设置自定义异常处理器

实现处理器后,开发者必须将其设置为异常处理器。要做到这一点,开发者只需在其项目中任何位置使用静态方法 Handler::registerHandler()

Handler::registerHandler(new DefaultExceptionsHandler());