Должен ли я использовать @в моем PHP-коде? - программирование

Должен ли я использовать @в моем PHP-коде?

Если я использую @ в своем коде, это повлияет на производительность?

4b9b3361

Ответ 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;

Ответ 5

Сама @ не является причиной проблем с производительностью (которые, кстати, в большинстве случаев незаметны для профилирующих графиков). Отсутствующие индексы массива и переменные undefined вызывают уведомления/предупреждения и что там происходит замедление. Сам оператор подавления ошибок не виноват.

Использование @$var вместо fugly isset($var)?$var:NULL имеет то преимущество, что все еще можно записывать отладочные уведомления, где isset полностью скрывает их.

Ответ 6

Да, это снизит вашу производительность при поиске ошибок. Поэтому нет, вы не должны использовать его, если не уверены, что не станете больше беспокоиться об этом.