示例:我使用抛出异常的PDO方法。但是在try块中,如果出现其他问题,我也会抛出自己的异常。现在我想分别处理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;
}
请注意,我有一个全局错误处理程序,负责记录文件的任何异常。这就是为什么我抛出自己的异常而不是直接写入日志文件(这样,我也得到了回溯)。
答案 0 :(得分:7)
您可以使用多个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:
答案 1 :(得分:1)
多个catch
es?或者仅捕获Exception
并检查其类型。