Вместо ожидаемого массива вы получите строку. Поведение функции не определено.
Исключения можно обработать все, подобную хрень (извините за выражения, но по-другому это не назовешь) - не обработать никак.
У исключения есть бектрейс, у вашего решения его нет - отследить как почему и откуда вылезла эта ошибка становится трудней.
Исключения можно выбрасывать в любом месте, ваш подход требует пробрасывания ответа об ошибке до контроллера, что является грубым нарушением принципа инкапсуляции.
Вообще, вопрос очень странный, джуниорам за такие вопросы надо проводить профилактическую беседу про ООП и обработку ошибок, а за подобный код - бить по рукам палкой.