пара вопросов на засыпку.
- кто уполномочен создавать роутер, сейчас он без параметров но потом может быть нужны будут параметры. например роутеру понадобится доступ к базе или банальный путь к файлу с роутами где они прописаны.
данный пример не очень показателен тк скорее всего у вас один бутстрап файл, один фронтконтроллер, и один роутер и к тому же один проект, либо проекты одинаковые. поэтому все изменения вы все равно сможете сделать в одном месте, либо в бутстрапе либо в конструкторе этом.
а представьте в другом проекте вам нужна будет другая реализация роутера? где вы будете вносить изменения?
правильно создать новый роутер, и передать в фронт контроллер из бутстрапа, тогда у вас будет потом не тронутый фронт контроллер, иначе если вы будете менять конструктор ФК то этот класс становится не переносимым.
очень рекомендую также использовать DI контейнер например из симфони
symfony.com/doc/current/components/dependency_inje...
тоже его в какой то момент начал использовать когда еще болел темой "я пишу свой фреймворк".
очень сложная это задача для новичка - сделать правильную архитектуру, хотя для самообучения это супер.