Em uma pergunta SO, perguntei aqui sobre algum código que eu não tinha certeza, alguém respondeu: "Aliás, código horrível lá: ele usa muito o símbolo de supressão de erro (@)".
Existe uma razão para isso ser uma má prática? Com coisas como:
$db=@new mysqli($db_info) or die('Database error');
, ele permite exibir apenas uma mensagem de erro personalizada. Sem suprimir erros, ele ainda exibirá a mensagem PHP típica de:
Aviso : mysqli :: mysqli (): php_network_getaddresses: getaddrinfo falhou: Nenhum host desse tipo é conhecido. em algum \ arquivo \ caminho na linha 6
bem como 'Erro no banco de dados'.
A supressão de erros é sempre ruim e, em caso afirmativo, o que especificamente está exposto acima é ruim?
Atualização: o código real que estou usando é:
or error('Datatabase error', 'An error occurred with the database' . (($debug_mode) ? '<br />MySQL reported: <b>' . $db->error . '</b><br />Error occurred on line <b>' . __LINE__ . '</b> of <b>' . __FILE__ . '</b>' : ''))
que remove toda a saída anterior e exibe uma mensagem de erro. Portanto, o fato de a mensagem de erro não incluir detalhes sobre o que aconteceu especificamente (que as pessoas parecem sugerir como uma razão para a supressão de erros ser ruim) é irrelevante.
or error('Datatabase error', 'An error occurred with the database' . (($debug_mode) ? '<br />MySQL reported: <b>' . $db->error . '</b>' : ''))