wraugh/defphp

PHP的动态异常

维护者

详细信息

gitlab.com/wraugh/defphp

源代码

问题

安装: 17

依赖: 1

建议: 0

安全性: 0

星标: 1

分支: 0

0.3.0 2018-04-08 13:33 UTC

This package is not auto-updated.

Last update: 2024-09-24 06:59:00 UTC


README

此库允许您在不维护样板类定义层次的情况下抛出类型良好的异常。

使用方法

使用composer安装: $ composer require wraugh/defphp

然后通过调用静态ex方法来抛出异常

try {
    \Defphp\Defphp::ex('MyException', "Hello, world");
} catch (MyException $e) {
    error_log($e->getMessage()); // logs "Hello, world"
}

您可以使用数组或逗号分隔的字符串为您的异常提供多个类型

try {
    \Defphp\Defphp::ex('DbError,NotFound');
} catch (NotFound $e) {
    http_response_code(404);
}

您还可以将ex方法作为全局命名空间中的函数导出

\Defphp\Defphp::alias();
ex('MyEx'); // throws an exception of type MyEx

// You can specify your own alias name
\Defphp\Defphp::alias('ohno');
ohno('MyEx'); // also throws an exception of type MyEx

或者您可以使用Ex特质向您的类添加一个ex静态方法

class MyClass {
    use \Defphp\Ex;

    public function __construct($foo) {
        if ($foo == 'bar') {
            static::ex("Foobar", '$foo is bar');
        }
    }
}

ex方法支持与基异常类构造函数相同的参数

try {
    throw new MyException("message", 42);
} catch (MyException $e) {
    // rethrow an equivalent exception
    \Defphp\Defphp::ex('MyException', "message", 42, $e);
}

注意事项

Defphp会将一行或两行推送到异常的堆栈跟踪中。所有通过Defphp抛出的异常似乎都是从代码中的同一行抛出的:Defphp::ex中实际上是throw语句的那一行。因此,异常的逻辑来源(ex方法被调用的位置)将在堆栈跟踪中低一行或两行。

Defphp在全局命名空间中定义接口。如果您的Defphp异常类型与您的接口之一冲突,您可能会遇到麻烦。这很容易避免:大型项目通常在其自己的命名空间内定义所有内容,而在小型项目中跟踪全局名称很容易。

在异常类型中输入错误仍然会导致抛出异常(与标准PHP不同,标准PHP将引发一个“类未找到”的致命错误)。这可能会使查找此类错误变得更加困难。有关进一步讨论,请参阅notes.md文件