PHP投掷无法从catch块内部进行

时间:2018-08-09 23:54:23

标签: php exception try-catch

当我调用$ this-> get()时,它在get方法内抛出了一个ClientClient异常,该异常不是ClientException,最后一个catch块被调用,但是整个方法都返回NULL。

我已经在最后一个catch块内使用var_dump($ e)确认该catch块正在捕获错误...但是抛出似乎不起作用!

这让我震惊,我不明白为什么。

public function get(string $url, $params = null): array
{
    $client = new Client();
    try {
        $response = $client->get($url, ['query' => $params]);
        return json_decode($response->getBody(), true);
    } catch (ClientException $e) {
        if (!empty($response = self::handleGuzzleErrors($e, $url))) {
            return $response;
        }
        throw $e;
    } catch (\Exception | \Throwable $e) {
        var_dump($e);
        throw $e;
    }
}
public function getSub(string $url, array $subs, $params = null): array
{
    $url = strtr($url, $subs);
    $result = $this->get($url, $params);
    return $result;
}

1 个答案:

答案 0 :(得分:0)

throw!= return

尝试像这样尝试/捕获来包装对$this->get()的呼叫:

public function getSub(string $url, array $subs, $params = null): array
{
    $url = strtr($url, $subs);
    try {
        $result = $this->get($url, $params);
    } catch (\Exception | \Throwable $e) {
        echo "This gets called";
    }
    return $result;
}

如果连接失败并抛出错误,则返回null之外的任何内容都是没有意义的。

如果要在引发错误时返回“默认”返回值,请使用return代替throw