PHP尝试捕捉跳过捕获,直接跳进最后

时间:2017-04-14 20:39:21

标签: php try-catch try-catch-finally

好的,我很困惑。我正在使用Slim框架,我有以下代码:

1 $app->post("/user/login", function (Request $request, Response $response) {
2    $resp = null;
3    try {
4       if (!array_key_exists("password", $request->getParams()) || !array_key_exists("username", $request->getParams())) {
5            throw new LiberInvalidRequestException("Not all required parameters were passed.");
6        }
7        $user = new User($this->db, [
8            'username' => $request->getParam('username'),
9            'password' => $request->getParam('password')
10        ]);
11        try {
12            $resp['logincode'] = $user->login();
13            $resp['success'] = true;
14        } catch (LiberAuthenticationException $exception) {
15            $resp['success'] = false;
16            $resp['errormessage'] = $exception->getMessage();
17        }
18    } catch (LiberInvalidRequestException $exception) {
19        $resp['success'] = false;
20        $resp['errormessage'] = $exception->getMessage();
21    } finally {
22        return $response->withJson($resp);
23    }
24 });

当我使用正确的参数调用此路线时,我得到null响应。在我看来,这不应该是可能的,因为以某种可能的方式将某些东西分配给$resp。当我使用调试器执行此功能时,我可以直到第12行,然后调试器跳转到finally块(第22行)。

这怎么可能?不应该继续执行或转到catch块吗?

1 个答案:

答案 0 :(得分:1)

好的,我找到了问题的解决方案。正如@deceze所说,有一个异常抛出,阻止块没有捕获。由于我使用PHP7.1 include语句可以抛出异常。这就是为什么首先抛出异常的原因。