zkrvndm, если вы попробуете вывести $e, то РНР его прекрасно выведет, потому что в этом объекте реализован метод __toString().
Но речь сейчас не об этом. В глобальном обработчике можете отправлять как угодно, можете и по отдельности вызывать $e->getFile() и $e->getMessage(). Хотя по мне трассировка вызовов гораздо важнее. Главное чтобы это было написано в одном месте, а не раскидано по коду
Единый try catch тоже сгодится, хотя чисто по структуре, в роутере ему не место.
Я нигде не писал, что в $e->getMessage() содержится имя файла.
Отправка в телеграм - это тот же вывод.
И за него должен отвечать определенный блок программы.
В РНР можно определить обработчик исключений, и прописать там отправку куда угодно. В одном месте, а не распихивать эту отправку по всему коду.
Я писал выше, что объединять в одном классе и саму сущность (опрос) и CRUD для неё - это не очень хорошая практика. Но для простоты можно сделать в одном.
Что должен делать метод vote(), я не очень понимаю.
Но в целом да, у класса Опрос должен быть метод пройтиОпрос, который должен возвращать экземпляр еще одного класса, РезультатОпроса.
Всю эту художественную самодеятельность надо из поста убрать,а привести ровно две картинки:
1. Код создания таблицы с книгами
2. список настроек mysql. Искать часы надо не под фонарем, а там где потерял. Если тормозит БД, то привдить надо настройки базы данных, а не веб-сервера
Но речь сейчас не об этом. В глобальном обработчике можете отправлять как угодно, можете и по отдельности вызывать $e->getFile() и $e->getMessage(). Хотя по мне трассировка вызовов гораздо важнее. Главное чтобы это было написано в одном месте, а не раскидано по коду
Единый try catch тоже сгодится, хотя чисто по структуре, в роутере ему не место.