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