gpt4 book ai didi

PHP不会在类内捕获错误,仅在调用者上

转载 作者:行者123 更新时间:2023-12-03 07:49:46 24 4
gpt4 key购买 nike

我试图从我的 JWT 类中捕获一个错误,但我不能在类中执行它,我唯一能从我的主调用者那里得到它。

我用我的“API”中的错误调用这个类,我从路由开始:

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

$controller->start();
});

$router->run();

之后,我的 Controller 将调用我的“API”类:
class UserAPI extends BaseAPI
{
protected $user;
protected $apiBase = "user";

function __construct($request, $origin)
{
parent::__construct($request);

$this->user = new User();
}

protected function logout()
{
if( isset($this->request[$this->apiBase . 'Data']) )
{
return $this->usuario->login($this->request[$this->apiBase . 'Data']);
}
else
{
return Helpers::errorResponse("User data not informed", 200);
}
}
}

最后我遇到了问题,我想在其中捕获错误但它不起作用的 User 类:
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 类 Firebase JWT .

最佳答案

相对类名(如您的示例中的 Exception)始终 Root 于您所在的命名空间。如果您没有定义命名空间,\用来。考虑:

<?php
namespace Foo;

use Vendor\Package\Bar;

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

这里我们有两个相对的类路径: BarException . PHP 解析 Bar通过 use声明到绝对类路径 \Vendor\Package\Bar . PHP 没有 use对应于 Exception 的语句, 所以 PHP 假设你的意思是 \Foo\Exception .

显然这不是你的意图。不幸的是,当这种情况发生时,PHP 是沉默的。它被我咬了好几次。

关于PHP不会在类内捕获错误,仅在调用者上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37871193/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com