Ответы пользователя по тегу PHP
  • Хорошая ли практика создавать свои классы Exception для отлавливания разных ошибок?

    @WhoMe
    UPD:
    > Это нормально что в контроллере столько много catch'eй?
    Не то чтобы нет, но "попахивает".
    > как быть, если у меня возникает несколько исключений, и я хочу выдать пользователю информацию о всех возникших сразу

    У вас смешана валидация входных параметров с возникновением нештатных ситуаций.
    Exception стоит кидать если метод не может вернуть осмысленный результат.
    Ошибки валидации ("сообщение слишком длинное", "файл не того расширения") можно собирать, к примеру, в массив. Как валидировать входные данные выходит за рамки этого вопроса.
    ------
    > Можно ли так делать?
    Попробуйте использовать правило 5 почему (ну или "зачем") чтобы попытаться добраться до сути.

    - Я даю отдельные имена исключениям.
    - Зачем?
    - Для того что бы отловить различные ошибки.
    - Зачем отлавливать различные типы ошибок?
    - Чтобы показывать разные сообщения.
    - Зачем показывать разные сообщения?
    - Чтобы пользователь мог отреагировать определенным образом на конкретный тип ошибки
    (решить что ему делать в случае конкретного исключения).

    Давайте посмотрим что человек (пользователь) на вашем сайте (системе) может сделать в случае ошибки:
    1. Не корректное сообщение.
    Привести его к корректному (сделать его короче, как-то отформатировать и т.п.)

    2. Не удалось загрузить файл.
    Если файл слишком большой - можно попробовать загрузить файл поменьше.
    Если это внутренняя ошибка (например: закончилось место на диске на сервере, нет прав на запись и т.п) - то ничего, здесь уже требуется вмешательство тех кто обслуживает систему.

    3. Ошибка PDO.
    Ничего, это внутренняя ошибка.

    Т.е. есть смысл создавать новый тип исключения, если пользователь системы может иначе отреагировать на этот тип.

    Я использую 2 типа исключений на уровне web-слоя: внешние и внутренние.
    Внешние - если пользователь может повлиять на них (страница не найдена, файл слишком большой, нет доступа и т.п.).
    В них сообщение показывается пользователю как есть. Подноготная (пути к файлам, пароли, названия БД и т.п) в такие ошибки не вкладывается.

    Внутренние - пользователь не может влиять (ошибка подключения к БД, SQL syntax error и т.п).
    Пользователю показывается только код ошибки. В такие ошибки также вкладываю техническую информацию.

    Ты (как программист) также можешь быть пользователем какой-то системы (к примеру, библиотеки).
    Например, библиотеки для работы с БД.
    Предположим ты импортируешь csv-файл в базу, заполняешь числовую колонку и вместо числа у тебя попадается текст.
    Запрос падает с ошибкой и тебе не плохо бы отличать её от ошибки синтаксиса.
    Если попался текст вместо числа - то можно просто пропустить строку.
    Если ошибка синтаксиса - то у ошибка в коде и продолжать импорт нет смысла.

    Подытожу:

    > Можно ли создавать свои пустые классы Exception'ов наследуемые от класса Exception только лишь для того что бы было отдельное имя исключения?

    Можно.

    Сколько делать отдельных исключений?
    Зависит от того как их будет обрабатывать пользователь.
    Если твой контроллер(модель, подсистема) кидает множество разных ошибок и все они обрабатываются одинаково - то стоит призадуматься.
    Ответ написан
    3 комментария
  • Кол-во запросов к MySQL

    @WhoMe
    Как-то давно тоже задавался таким же вопросом, и получил такой же ответ "Похер. Главное чтоб не тормазило".
    Понятия не имею сколько у меня запросов к базе на проектах. Хорошим тоном является отсутствие бесполезных/нерациональны запросов,
    или там запросы в цикле (Хотя могу поспорить, что в каком-нибудь отдельном случае, теоретически, это может быть рационально и тогда это не будет плохим тоном).
    Это чисто психологическое. Если хотите цифру, давайте назову, скажем не более 15.
    Ответ написан
    Комментировать
  • Как реализовано?

    @WhoMe
    Дело в том, что URI не обязан проецироваться на файловую систему, т.е на www.website.net не обязательно должна быть директория PAGE, просто такое поведение установлено по умолчанию. Погуглите по слову mod_rewrite
    Ответ написан
    2 комментария
  • Как работает Libevent?

    @WhoMe
    Висит. Libevent не добвляет никакой магии и предполагает работу с неблокирующими вызовами. У Вас таких нет.
    Ответ написан
    Комментировать