Примечание: во-первых, я понимаю, что 99% разработчиков PHP используют оператор подавления ошибок (я был одним из них), поэтому я ожидаю, что любой PHP-разработчик, который видит это не согласным.
По вашему мнению, допустимо ли когда-либо использовать оператор @ для подавления ошибки / предупреждения в PHP, тогда как вы, возможно, обрабатываете ошибку?
Краткий ответ:
Нет!
Более правильный ответ:
Я не знаю, потому что я не знаю всего, но до сих пор я не сталкивался с ситуацией, когда это было бы хорошим решением.
Почему это плохо:
Я думаю, что за 7 лет использования PHP я видел бесконечную агонию отладки, вызванную оператором подавления ошибок, и никогда не сталкивался с ситуацией, когда это было неизбежно.
Проблема в том, что фрагмент кода, для которого вы подавляете ошибки, может в настоящее время вызывать только ту ошибку, которую вы видите; однако, когда вы изменяете код, на который опирается подавленная строка, или среду, в которой она выполняется, есть все шансы, что строка попытается вывести совершенно другую ошибку из той, которую вы пытались игнорировать. Тогда как вы отслеживаете ошибку, которая не выводится? Добро пожаловать в ад отладки!
Мне потребовалось много лет, чтобы понять, сколько времени я трачу каждые пару месяцев из-за скрытых ошибок. Чаще всего (но не исключительно) это происходило после установки стороннего скрипта / приложения / библиотеки, который не содержал ошибок в среде разработчиков, но не мой из-за разницы в конфигурации php или сервера или отсутствующей зависимости, которая обычно выдает ошибку сразу оповещение о проблеме, но не когда разработчик добавляет магию @.
Альтернативы (в зависимости от ситуации и желаемого результата):
Обработайте фактическую ошибку, о которой вы знаете, так что, если фрагмент кода будет вызывать определенную ошибку, он не будет запущен в этой конкретной ситуации. Но я думаю, что вы получили эту часть, и вы просто беспокоились о том, что конечные пользователи увидят ошибки, и это то, что я сейчас рассмотрю.
Для обычных ошибок вы можете настроить обработчик ошибок так, чтобы они выводились так, как вы хотите, когда вы просматриваете страницу, но скрывали от конечных пользователей и регистрировали, чтобы вы знали, какие ошибки вызывают ваши пользователи.
Для неустранимых ошибок отключите display_errors
(ваш обработчик ошибок все еще срабатывает) в вашем php.ini и включите ведение журнала ошибок. Если у вас есть сервер разработки, а также действующий сервер (который я рекомендую), то этот шаг не требуется на вашем сервере разработки, поэтому вы все равно можете отлаживать эти фатальные ошибки, не прибегая к просмотру файла журнала ошибок. Есть даже трюк, использующий функцию отключения , чтобы отправить множество фатальных ошибок вашему обработчику ошибок.
В итоге:
Пожалуйста, избегайте этого. Может быть, для этого есть веская причина, но я пока не вижу ее, поэтому до того дня, по моему мнению, (@) оператор подавления ошибок - зло.
Вы можете прочитать мой комментарий на странице Операторы контроля ошибок в руководстве по PHP, если вам нужна дополнительная информация.