За последние 24 часа нас посетили 55283 программиста и 1680 роботов. Сейчас ищут 1070 программистов ...

Exception для 404 ошибки

Тема в разделе "PHP для новичков", создана пользователем Sergey_Tsarev, 29 май 2018.

  1. Sergey_Tsarev

    Sergey_Tsarev Активный пользователь

    С нами с:
    17 мар 2016
    Сообщения:
    502
    Симпатии:
    105
    Всем привет!

    Объясните мне тупому как использовать исключения?
    Я как-то никогда не заморачивался с ними. Но вот пришло время разобраться с этим механизмом. Я может как-то неправильно понимаю их работу? Я думал так: в любом месте приложения мы можем бросить исключение и в любом месте приложения можем это исключение отловить.
    Я сейчас сочиняю роутер. И мне хотелось бы, чтобы он перед выводом на экран страницы проверял есть ли ошибки. Если есть, то вместо страницы отображаем страницу с текстом соответствующей ошибки. Сейчас у меня работает примерно так:
    PHP:
    1. if (class_exists($name)) {
    2.     $controller = new $name();
    3. }
    4. else {
    5.     $this->error[404] = 'Такой страницы не существует';
    6. }
    Ну и перед выводом проверяю. Если в массиве есть ошибка, значит вывожу её. Но в контроллере в свою очередь тоже часто нужно вызвать ошибку, например если пользователь не авторизован или по какой-либо другой причине. Да и много где ещё. И вот я хочу использовать для этого исключения. Можно это реализовать как-то? Спасибо.
     
  2. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.857
    Симпатии:
    656
    Проброс и обработка исключений будут нормально работать не в любом месте, а в пределах try-catch. Возможные источники возникновения ошибок вроде 404 определяются легко, поэтому можно использовать и обычное ветвление. Хотя, чтобы не возиться с множественными вложенными ветвлениями, передачей связанных с ошибкой параметров и т.п., можете использовать и исключения.
    --- Добавлено ---
    P.S. Для разворачивания ветвлений можно использовать технику
    PHP:
    1. if (ERROR) {
    2.     error(404);
    3.     return; // return false; и т.п.
    4. }