Считается ли стандартной практикой отключение уведомлений в журнале ошибок для разработки PHP?

Я исходил из фона J2EE, и кажется, что разработчики PHP очень часто отключают и игнорируют уведомления с помощью инструкции: error_reporting(E_ALL & ~E_NOTICE);

Приложение, в котором я работаю, полно сообщений о неустановленных переменных? Мне это кажется очень странным.


person BeWarned    schedule 06.10.2009    source источник
comment
Я не писал оригинал, но трудно определить, какие уведомления можно игнорировать, потому что оригинальный программист разработал код таким образом, а не уведомления, которые являются настоящей ошибкой.   -  person BeWarned    schedule 07.10.2009
comment
Этот оператор на самом деле явно включает уведомления (что не обязательно для E_ALL). Вы либо имеете в виду error_reporting(E_ALL & ~E_NOTICE), либо смотрите примеры, написанные людьми, которые перепутали E_NOTICE и E_STRICT. :-)   -  person Ben Blank    schedule 07.10.2009
comment
Нет, это отключает уведомления. Он используется по умолчанию в файлах php.ini большинства дистрибутивов и прямо говорит об этом.   -  person staticsan    schedule 07.10.2009


Ответы (5)


Это плохая практика, но довольно распространенная.

Можно сказать, что это считается стандартной практикой, поскольку это стандартная настройка по умолчанию.

Однако тот факт, что это настройка по умолчанию в PHP, не должен восприниматься как хорошая идея! (кашель register_globals кашель )

Проблема в том, что E_NOTICE охватывает как неопределенные переменные, так и неопределенные индексы массива, первый из которых гораздо лучше указывает на ошибку, чем последний.

Классическая ошибка, которую это скрывает, заключается в использовании $var вместо $this->var. Только по этой причине я думаю, что стоит внимательно отнестись к очистке предупреждающих сообщений индекса неопределенного массива, чтобы ошибки неопределенных переменных были более очевидными.

Я думал, что PHP 5.3 позволяет вам разделить их (я еще не использую его), но я только что посмотрел и не могу найти упоминания об этом.

person John Carter    schedule 06.10.2009
comment
Хорошо это или плохо, это это стандартная практика - это значение по умолчанию при новой установке PHP и наиболее распространенная настройка. - person ceejayoz; 07.10.2009
comment
Отредактировано, чтобы уточнить, что это значение по умолчанию - person John Carter; 07.10.2009

Да, это считается стандартной практикой (несмотря на мнения о хорошем и плохом). Согласно руководству по PHP:

В PHP 4 и PHP 5 значение по умолчанию — E_ALL & ~E_NOTICE. Этот параметр не показывает ошибки уровня E_NOTICE. Вы можете показать их во время разработки.

Отображение уведомлений может помочь склонным к опечаткам при отладке, но я не могу вспомнить ни одного случая, когда меня укусили за задницу, если я их не видел (я хороший машинист). Я предполагаю, что это станет шоком для кого-то с опытом работы с Java, хотя...

person ceejayoz    schedule 06.10.2009
comment
На самом деле это может сильно укусить вас за задницу, много раз, когда я видел уведомление о неустановленной переменной, это помогало мне отслеживать и находить ошибку. И это не только из-за опечаток, если вы устанавливаете элементы массива динамически, может возникнуть проблема с используемым вами циклом, который не устанавливает некоторые элементы, и вы получите об этом ошибку уровня уведомления. Так что определенно не рекомендуется отключать это во время разработки. - person Ali; 07.10.2009

Это считается стандартной практикой, так как теперь это настройка по умолчанию в новой версии PHP.

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

Если вы программируете правильно, то это не должно требоваться

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

Для получения дополнительной информации посетите PHP-страницу отчетов об ошибках< /а>

:)

person Andrew    schedule 06.10.2009

Не уверен, что это упомянуто, но локальные серверы разработки, такие как:

  • Ксамп;
  • Ламп;
  • Мамп;
  • Вамп;

И многие другие имеют настройки ошибок PHP, чтобы сообщать обо всех ошибках и уведомлениях. Равно error_reporting(E_ALL);.

Однако, если вам когда-нибудь понадобятся эти быстрые коды для проверки вашего кода на наличие уведомлений или ошибок, чтобы установить текущий уровень отчета об ошибках, который сервер будет выполнять для определенного PHP-скрипта:

Показывает ошибки, но не показывает уведомления:

error_reporting(E_ALL & ~E_NOTICE | E_STRICT);

Показывает все:

error_reporting(E_ALL);

Показывает только ошибки:

error_reporting(E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR);

Вам просто нужно добавить одну из этих строк в свой PHP-скрипт в самом начале.

PS: Не очень хорошая идея показывать уведомления на вашем хостинг-сервере. Обязательно удалите эти строки при отправке на сервер хостинга


Если вы хотите изменить конфигурацию PHP.ini для одного из этих значений.

Откройте конфигурационный файл PHP.ini и в строке 514º есть уровень сообщения об ошибках по умолчанию.

Откройте, это поможет.

С уважением

РЕДАКТИРОВАТЬ: Это была линия 514º, а не 504º. Извиняюсь

person Fábio Antunes    schedule 06.10.2009

Файл php.ini по умолчанию, поставляемый с официальным дистрибутивом, немного шизофреничен. С одной стороны, он утверждает, что он полезен для разработки (например, показывает ошибки), но затем у него отключены уведомления вместе с примечанием о том, что их включение было бы полезно для разработки. (На самом деле я подал сообщение об ошибке, но оно было закрыто, так как они явно не хотели это исправлять.) IME, большинство разработчиков не меняют это значение по умолчанию, потому что большинство из них не знают, что могут это сделать. Итак, я вижу много PHP-кода, который генерирует уведомления по этой причине.

Если у вас есть выбор, включите уведомления. Затем идите и исправьте код, который делает глупые вещи, такие как использование неустановленных переменных и тому подобное. Ваш код будет лучше для этого.

person staticsan    schedule 06.10.2009