Пример: Я использую метод PDO, который генерирует исключение. Но внутри блока try я также бросаю собственное исключение, если что-то еще не так. Теперь я хочу отдельно обрабатывать PDOException и мое собственное исключение. Как я могу отделить это, чтобы он работал?Как поймать эти вложенные исключения?
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;
}
Обратите внимание, что у меня есть глобальный обработчик ошибок, который заботится о регистрации каких-либо исключений в файле. Вот почему я бросаю свои собственные исключения вместо того, чтобы писать непосредственно в файл журнала (таким образом, я получаю также обратную трассировку).