Сегодня я столкнулся с проблемой, которая была хорошим примером того, когда можно хотя бы временно использовать оператор @.
Короче говоря, я нашел информацию для входа (имя пользователя и пароль в виде простого текста), записанную в трассировку журнала ошибок.
Здесь немного больше информации об этой проблеме.
Логика входа находится в своем собственном классе, потому что система должна предлагать разные механизмы входа. Из-за проблем миграции сервера произошла ошибка. Эта ошибка вывела всю трассировку в журнал ошибок, включая информацию о пароле! Один метод ожидал имя пользователя и пароль в качестве параметров, поэтому trace записал все верно в журнал ошибок.
Долгосрочное исправление здесь заключается в рефакторинге указанного класса вместо использования имени пользователя и пароля в качестве 2-х параметров, например, с использованием одного параметра массива, содержащего эти 2 значения (в таких случаях trace выдает Array для параметра). Есть и другие способы решения этой проблемы, но это совсем другая проблема.
В любом случае. Сообщения трассировки полезны, но в этом случае были просто вредны.
Урок, который я усвоил, как только заметил, что вывод трассировки: иногда подавление сообщения об ошибке на данный момент является полезной мерой пробела во избежание дальнейшего вреда.
По-моему, я не думал, что это плохой дизайн класса. Сама ошибка была вызвана исключением PDOException (проблема с отметкой времени при переходе с MySQL 5.6 на 5.7), которое просто выгружало все настройки PHP по умолчанию в журнал ошибок.
В общем, я не использую оператор @ по всем причинам, описанным в других комментариях, но в этом случае журнал ошибок убедил меня сделать что-то быстрое, пока проблема не будет исправлена должным образом.