Хорошо ли игнорировать (@) ошибки, возникающие из-за внешних факторов?
У меня есть запрос к серверу LDAP в моем коде. Я открываю связь с ldap_connect
и проверить, что возвращенный дескриптор действителен, но затем я делаю поисковый запрос с ldap_search
используя открытый дескриптор. Но иногда из-за сбоя в сети или чего-то еще, ldap_search
не с предупреждением Search: Can't contact LDAP server
,
На моем рабочем сервере я воспринимаю все предупреждения как фатальные ошибки, поэтому весь рендеринг страницы не выполняется.
Должен ли я просто подготовить ldap_search
с @
и просто проверьте возвращаемое значение (я проверяю это сейчас), или есть лучший способ справиться с этим?
2 ответа
Вы можете превратить предупреждения в исключения, установив собственный обработчик ошибок. Просто перехватите все предупреждения и добавьте исключение в обратный вызов. Таким образом, вам не придется иметь дело с нежелательными выходными данными, но у вас есть шанс восстановить (направить пользователя на страницу с временными ошибками), чего нельзя сделать с фатальными ошибками.
Иногда внешний ресурс выдает предупреждение, а также позволяет проверить, произошла ли ошибка (например, mysqli.) В этом случае вы можете проигнорировать предупреждение с помощью @
, но обязательно проверьте, произошла ли ошибка.
Я бы не просто подавил предупреждение, не убедившись, что оно обрабатывается другим способом. Пользователи хотят знать, почему что-то пошло не так, особенно если ситуация носит временный характер.
В качестве примечания: я думаю, что предупреждения в php являются нелепой концепцией. Код либо не работает, либо нет. Если это не удастся, я хочу быть в состоянии справиться с этим, не прыгая через обручи. Просто брось мне исключение, пожалуйста!
Лично я бы с тобой согласился, просто засунь @
там и вручную проверяю на наличие ошибок - делаю это для mysql_connect
а также Memcache->connect
и любой fsockopen
звонки, которые я делаю, так как это может также позволить такие вещи, как "повторите попытку несколько раз, прежде чем умереть".
Тем не менее, я уверен, что большинство орехов скажет вам, что вы никогда не должны использовать @
и вы должны использовать вместо этого пользовательские обработчики ошибок. Так что... до вас!