Если я использую @
в своем коде, это повлияет на производительность?
Должен ли я использовать @в моем PHP-коде?
Ответ 1
Эта статья полезна для ответа на ваш вопрос: http://anvilstudios.co.za/blog/php/how-to-ignore-errors-in-a-custom-php-error-handler/
В частности, раздел "@имеет свои применения":
Теперь действительно нужно использовать оператор
@
очень экономно, обрабатывая вместо того, чтобы подавлять их. Но есть небольшое количество ситуации, я могу думать о том, где нужно было бы подавить некоторые PHP ошибки. Позвольте мне предложить два примера:
Вы можете использовать большую внешнюю библиотеку, которая использовала
@
, и поэтому должна быть в состоянии игнорировать эти ошибки как автора из библиотеки, в противном случае ваша программа будет пытаться где это не нужно. Вы можете отредактировать библиотеку, но она может уделите много времени, и ваши изменения снова должны быть применены каждый раз автор выпускает обновление в библиотеку.Другим примером может быть, когда функция
fopen
используется для открытия внешнего URL-адреса, и URL-адрес не может быть открыт для одного из многих возможных причины. Функция возвращаетfalse
, чтобы указать сбой, который отлично, но, чтобы процитировать руководство PHP, "ошибка уровняE_WARNING
равна сгенерированный" тоже, не очень большой - это действительно должно привести к исключению вместо этого, поскольку это нерегулярная ситуация, но следует ожидать. В этом случае вы хотели бы игнорировать ошибка и продолжить выполнение программы, явно отвечая соответствующим образом - именно за исключениями! Тем не менее, существует способ преобразования ошибки в исключение, и поэтому избегайте использования@
в этой ситуации. В вашем настраиваемом обработчике ошибок (где мы находимся в этом посте), бросьте ErrorException - это значит, что вы должны явно поймать и обработать это в коде, который раньше использовал@
, что является лучшим способом обработки ошибок.
Ответ 2
Вы не должны использовать оператор подавления ошибок.
В производственной среде пользователю не следует выводить сообщения об ошибках PHP. Они не полезны, потому что они полны технических подробностей и не говорят пользователю, как действовать. Вместо этого запишите ошибку и покажите свое собственное сообщение об ошибке.
В среде разработки все сообщения об ошибках PHP должны отображаться пользователю. Они являются жизненно важным ключом к причине проблемы и должны быть замечены раньше.
Используйте Параметры конфигурации ошибок и ведения журнала, чтобы различать тезисы. Производительность не является полезным критерием для принятия решения о том, следует ли использовать @или нет.
Ответ 3
"Глупая последовательность - это хобгоблин маленьких умов".:) Чтобы сказать, что "никогда не использовать его", это немного любительская позиция, ИМО. Я предпочитаю $var = @$_ POST ['key'] $var = isset ($ _ POST ['key'])? $_POST ['key']: null;
Ответ 4
Да, это влияет на производительность вашего script значительным образом.
Прочтите статью Производительность подавления ошибок PHP.
Ответ 5
Сама @
не является причиной проблем с производительностью (которые, кстати, в большинстве случаев незаметны для профилирующих графиков). Отсутствующие индексы массива и переменные undefined вызывают уведомления/предупреждения и что там происходит замедление. Сам оператор подавления ошибок не виноват.
Использование @$var
вместо fugly isset($var)?$var:NULL
имеет то преимущество, что все еще можно записывать отладочные уведомления, где isset полностью скрывает их.
Ответ 6
Да, это снизит вашу производительность при поиске ошибок. Поэтому нет, вы не должны использовать его, если не уверены, что не станете больше беспокоиться об этом.