【问题标题】:Handling PHP exceptions the correct way以正确的方式处理 PHP 异常
【发布时间】:2019-07-20 00:24:12
【问题描述】:

我正在开发自己的 PHP 框架,我的代码虽然运行正常,但它越来越大;这当然会导致我的框架崩溃的多种方式,所以我决定是时候像任何其他 PHP 框架一样实现异常处理了,那个“不错的”错误视图可以告诉你可能出了什么问题。

我已经完成了我的研究并了解了 Extension PHP 默认类的工作原理,我知道我能够扩展这个类并自定义错误消息。

我也知道要触发一个异常,你必须抛出它并用“try/catch”语句捕获它,就像这样......

class MyCustomException extends \Exception()
{
    // My stuff
}

public function dontBeZero($number) 
{
    if ($number == 0) {
        throw new MyCustomException('You gave me zero!!');
    }
}

try {
    dontBeZero(0);
} catch (MyCustomException $e) {
    echo '<pre>';
    $e->getMessage(); 
    echo '</pre>';
}

我明白这一点,但我真正的问题是:Laravel、Symfony 等流行的框架如何设法向您发送一条漂亮的消息,向您显示错误是什么,它们将所有验证它是否的逻辑保存在哪里应该或不应该抛出异常,最重要的是他们在哪里捕获它们?。

【问题讨论】:

    标签: php exception


    【解决方案1】:

    大多数框架通过自定义错误处理程序显示这些错误。 laravel 常用的一个是whoops

    您只需将其注册为自定义处理程序,您就会看到漂亮的错误页面:

    $whoops = new \Whoops\Run;
    $whoops->pushHandler(new \Whoops\Handler\PrettyPageHandler);
    $whoops->register();
    

    请记住,您应该在生产环境中禁用这些(这样您的堆栈跟踪/代码就不会暴露)。

    【讨论】:

    • 感谢您的建议,使用第三方库来解决我的问题似乎很棒,但我试图让我的框架尽可能地保持原样,以便学习。
    【解决方案2】:

    查看set_error_handlerset_exception_handler这两个函数。这些函数允许您注册一个回调函数,当发生错误或异常时调用该函数。

    这些回调函数由 Php 运行时调用,并提供错误详细信息作为参数。错误详细信息包括错误行号、堆栈跟踪、文件名等。然后回调函数可以格式化并显示这些信息

    【讨论】:

    • 我会研究这些功能并试一试,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多