Зачем в catch делать throw?
try {
    $this->initDBConnect();
} catch (\Exception $e) {
    // Тут залогировали
   $this->logger->error('Некоторое сообщение', [некоторые данные]);

    // тут выкинули дальше
    // или throw new MyAnyException, 
    // а не просто дальше выкидывать тоже самое
    throw $e; 
 }Для чего бросать дальше
Например идет процесс оплаты товара, в клиенте выкинулось исключение... мы в слое работы с АПИ платежки поймали исключение и залогировали, но выкинули дальше, чтобы наша система выше поймала, откатила транзакцию и плюнула ошибкой уже своей для слоя выше
Хороший вопрос.
1. В catch только одно проверяем конкретное исключение, которое мы ждём и знаем как обработать.
Например, при вставке записи в БД мы можем обработать ошибку уникального ключа, сообщив пользователю, что такой юзернейм уже занят. 
Но если ошибка не такая, какую мы ожидали, то она должна быть обработана стандартным способом. Для этого её надо перевыборосить.
2. Если в принципе надо сначала что-то сделать в случае ошибки.
Например, как в предыдущем ответе, залогировать
Или - более распространенный случай - откатить транзакцию.
После этого исключение надо перевыбросить, чтобы ошибка обработалась обычным способом
3. Довольно экзотический случай. Исключение содержит стек вызовов, в котором. помимо прочего, лежат все параметры функций. Иногда эти параметры могут быть довольно чувствительными к раскрытию - например, параметрами конструктора класса для соединения с БД  являются параметры подключения к БД. Чтобы очистить стек вызовов, надо бросить новое исключение. Но перевыбрасывать существующее нельзя - недо бросить именно совсем новое исключение, передав в него сообщение об ошибке из старого
Конкретный пример в вопросе - это скорее всего попытка реализовать п.3, только неудачная.