В данном случае был бы более громоздкий код. Пожалуй, все причины :)
Громоздкий — это вряд ли. Ты ж где-то ещё и делаешь use этим классам? А так будет в конечном коде вызов одного и того же метода одного и того же класса, но с разными id (или name, тут уже как тебе нравится, главное уйти от tight coupling с конкретными именами классов), и всё. Внутри этого класса уже будут конкретные use/new для конкретных классов. Ну ещё покрыть тестами, чтобы проверять соответствие id<->класс и ничего там не поломать случайно.