1
私はJWTクラスからエラーをキャッチしようとしていますが、クラス内でエラーをキャッチしようとしていますが、 。PHPはクラス内でクラス内のエラーをキャッチしません
私は、ルーティングで始まる私の「API」からのエラーでこのクラスを呼んでいる:
:私は私の「API」クラスを呼び出します私のコントローラを持っている。その後$router = new Router();
$router->all('/users', function()
{
$controller = new Controllers\UserController();
$controller->start();
});
$router->run();
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を使用しています。
おそらくあなたの 'User'クラスは名前空間にあります。もしそうなら、あなたは 'catch(\ Exception $ exception)'をしたいでしょう。 – bishop
@ビショップは、それは働いた、それがこの単純だったと信じることができない!なぜそれが答えとして起こったのかを説明してください。私はそれを受け入れることができますか? Tks – Terkhos
@ジョナサン:いいえ。 PHPは遅延ロードされており、 "instanceof"や "catch"のようなものは必要ない場合にはインタフェースの存在をチェックしません。パフォーマンスには優れていますが、例外処理をユニットテストしない人にとっては悪いことがあります。 – Evert