簡體   English   中英

如何捕獲此嵌套異常?

[英]How to catch this nested exceptions?

示例:我使用引發異常的PDO方法。 但是在try塊中,如果其他地方出了問題,我也會拋出自己的Exception。 現在,我想分別處理PDOException和我自己的Exception。 我如何才能分開使用它呢?

   public function prepare(string $sql, array $params) {
    try {
        $prepared = $this->dbh->prepare($sql); // may throw PDOException
        $i = 1;
        foreach ($params as $param) {
        $ok = $prepared->bindParam($i, $param);
        if (!$ok) {
            throw new Exception("Unable to bind parameter (" . $param . ") to prepared statement: " . $sql);
        }
        $i++;
        }
    } catch (PDOException $e) {
        throw new Exception("DB:prepare(): Could not prepare statement. " . $e->getMessage());
    }
    return $prepared;
   }

請注意,我有一個全局錯誤處理程序,負責將任何異常記錄到文件中。 這就是為什么我拋出自己的異常而不是直接將其寫入日志文件的原因(這樣,我也會得到回溯)。

您可以使用多個catch塊,如下所示:

try {
    // ...
} catch (PDOException $e) {
    // Handle the PDOException, with some specific code
} catch (Exception $e) {
    // Handle any other kind of Exception 
    // that has not already been catched by 
    // one of the previous(es) catch block
}

但是請注意,您必須將“最具體的”異常類型放在首位-這意味着Exception必須是最后一個。


這里有一些您可能感興趣的關於異常和PHP的文章/博客文章:

多次catch 或者僅捕獲一個Exception並檢查其類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM