Зачем нужны исключения?

Есть такая ситуация
public function getNews($id) {

        $this->key = "id";
        if(!$rows = parent::findById($id)){
            throw new \Exception('not find news');
        }
        return $rows;

    }


Если новостей нет, выбрасывается исключение.
b0a9fa6173184e3b8684e675c97d54a6.png
Так почему бы не сделать просто
public function getNews($id) {

        $this->key = "id";
        if(!$rows = parent::findById($id)){
            return "Нет новостей";
        }
        return $rows;

    }


Вместо каши с исключением, мы увидим красивое сообщение.
  • Вопрос задан
  • 3494 просмотра
Решения вопроса 2
crmMaster
@crmMaster
Вместо ожидаемого массива вы получите строку. Поведение функции не определено.

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

У исключения есть бектрейс, у вашего решения его нет - отследить как почему и откуда вылезла эта ошибка становится трудней.

Исключения можно выбрасывать в любом месте, ваш подход требует пробрасывания ответа об ошибке до контроллера, что является грубым нарушением принципа инкапсуляции.

Вообще, вопрос очень странный, джуниорам за такие вопросы надо проводить профилактическую беседу про ООП и обработку ошибок, а за подобный код - бить по рукам палкой.
Ответ написан
Исключения - это принципиальный подход к обработке ошибок и структурирования кода обработки нештатных ситуаций. Исключения сегодня есть во многих современных ОО-языках, и в целом работа с ними совершенно не зависит от того, как, куда и какие выдаются сообщения.
То, что вам вываливается не очень удобный для чтения текст - это вопрос конкретно поведения PHP для непойманных исключений, а не исключений в принципе. Если почитаете не только про то, как исключения выбрасывать, а еще и как их обрабатывать, то возможно поймете, что при возникновении исключения можно совершить любые необходимые действия в скрипте, как то записать ошибку в текстовый лог, записать в БД с датой и временем, или даже послать SMS дежурному администратору.
Не знаю, что вы использовали в качестве источника (неужели книги по PHP так плохи?), но вы что-то явно не дочитали про исключения. Сейчас ваш вопрос похож на такой: "Зачем мне нужна фура, если я могу добраться на работу на 38-м автобусе?". Т.е. как если бы вы раньше не видели грузового транспорта, и не представляли бы, что с ним вообще делают.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
trevoga_su
@trevoga_su
В данном примере все не правильно - уместнее всего вернуть пустой массив или объект, реализующий интерфейс Countable (при условии, что в случае нахождения новостей они все также складируются в этот объект).

Отсутствие новости - НЕ исключительная ситуация. Пример не правильный на все 100%.
Исключительная ситуация - мы не может к СУБД законнектиться, что бы новости получить.

А исключения нужны, Ты просто их не умеешь готовить и не понимаешь, что это такое. В интернете об исключениях масса информации. Нет смысла объяснять тут.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы