Php 菲律宾元';无法捕获类内的错误,仅在调用方上

Php 菲律宾元';无法捕获类内的错误,仅在调用方上,php,error-handling,Php,Error Handling,我试图从我的JWT类中捕获一个错误,但是我不能在类内部执行,我只能从我的主调用者那里获取它 我正在调用这个类,错误来自我的“API”,我从路由开始: $router = new Router(); $router->all('/users', function() { $controller = new Controllers\UserController(); $controller->start(); }); $router->run(); 之后,我的

我试图从我的JWT类中捕获一个错误,但是我不能在类内部执行,我只能从我的主调用者那里获取它

我正在调用这个类,错误来自我的“API”,我从路由开始:

$router = new Router();
$router->all('/users', function()
{
    $controller = new Controllers\UserController();

    $controller->start();
});

$router->run();
之后,我的控制器将调用我的“API”类:

最后我遇到了一个问题,用户类,我想捕捉一个错误,但它不起作用:

class User extends SimpleModel
{
    public function logout($userData)
    {
        try
        {
            //At this point i will get an error since the provided token is invalid on purpose
            $jwt = JWT::decode($userData['token'], SECRET_KEY, ['HS512']);
        }
        //Wont hit here even for a miracle
        catch (Exception $exception)
        {
            echo "Caught ExceptFoo\n";
            echo "Message: {$exception->getMessage()}\n";
        }
    }
}
我唯一能发现这个错误的地方是路由文件,它是我的index.php文件

对于我正在使用的JWT类。

相对类名称(如您的示例中的
Exception
)始终根于您所在的名称空间。如果不定义名称空间,将使用
\
。考虑:

<?php
namespace Foo;

use Vendor\Package\Bar;

try {
    Bar::throwAnException();
} catch (Exception $ex) {
    die((string)$ex);
}

您的
用户
类可能位于命名空间中。如果是这样的话,你会想要
catch(\Exception$Exception)
@bishop,那就行了,真不敢相信这么简单!你能解释一下为什么会发生这样的事吗?这样我就可以接受了?Tks@Jonathan:否。PHP是延迟加载的,如“instanceof”和“catch”之类的东西在不需要时不会检查接口是否存在。这对性能很好,但对那些不进行异常处理单元测试的人来说可能不好。
<?php
namespace Foo;

use Vendor\Package\Bar;

try {
    Bar::throwAnException();
} catch (Exception $ex) {
    die((string)$ex);
}