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