Каков рекомендуемый error_reporting () устанавливающий для разработки? Что относительно E_STRICT?

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

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null.

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

29
задан SeanDowney 16 January 2012 в 07:11
поделиться

7 ответов

В PHP 5 вещи, покрытые E_STRICT, не покрыты E_ALL, так для получения большей части информации, необходимо объединить их:

 error_reporting(E_ALL | E_STRICT);

В PHP 5.4, E_STRICT будет включен в E_ALL, таким образом, можно использовать всего E_ALL.

можно также использовать

error_reporting(-1);

, который будет всегда включать весь ошибки. Который более семантически корректен как:

error_reporting(~0);
44
ответ дан Pacerier 28 November 2019 в 01:17
поделиться

Используйте следующее в php.ini:

error_reporting = E_ALL | E_STRICT

Также необходимо установить Xdebug, он может выделить ошибки в ослеплении ярких цветов и распечатать полезную подробную информацию.

Никогда не позволяют никакой ошибке или уведомлению в Вашем коде, даже если это безопасно.

10
ответ дан Eduardo Marinho 28 November 2019 в 01:17
поделиться

По-моему, чем выше Вы устанавливаете уровень сообщения об ошибке в этапе разработки, тем лучше.

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

http://php.net/error_reporting

E_ALL | E_STRICT для разработки с PHP прежде 5.2.0.

5.2 представляет E_RECOVERABLE_ERROR, и 5.3 представляет E_DEPRECATED и E_USER_DEPRECATED. Вы, вероятно, захотите включить тех при выполнении одной из тех версий.

, Если Вы хотели использовать магические числа, Вы могли бы просто установить эти error_reporting, значение к некоторому довольно высокому значению 2^n-1 - говорит, 16777215, и который действительно просто включил бы все биты между 1..n. Но я не думаю с помощью магических чисел, хорошая идея...

, По-моему, PHP допустил ошибку немного при наличии E_ALL не действительно быть всеми. Но по-видимому это будет фиксированным в PHP 6...

5
ответ дан Sk8erPeter 28 November 2019 в 01:17
поделиться

В более новых версиях PHP E_ALL включает больше классов ошибок. Начиная с PHP 5.3 E_ALL включает все кроме E_STRICT. В PHP 6 это будет alledgedly включать даже это. Это - хорошая подсказка: лучше видеть больше сообщений об ошибках, а не меньше.

то, Что включено в E_ALL, документируется в , PHP предопределил константы страница в руководстве онлайн.

Лично, я думаю, что все так очень при использовании E_STRICT. Не имеет значения это, конечно, не причинит Вам боль, тем более, что это может препятствовать тому, чтобы Вы писали сценарии, которые имеют маленький шанс получения прерванного будущие версии PHP. С другой стороны, в некоторых случаях строгие сообщения могут быть слишком шумными, возможно, особенно, если Вы спешите. Я предлагаю, чтобы Вы включили его по умолчанию и выключили его, когда это становится раздражающим.

2
ответ дан Jan Krüger 28 November 2019 в 01:17
поделиться

В зависимости от Ваших планов долговременной поддержки относительно этого кода, отлаживающего с E_STRICT, включил, может помочь Вашему коду продолжить работать в далеком будущем, но это - вероятно, излишество для ежедневного использования. Существует две важных вещи [приблизительно 111] для учета:

  1. На руководство , большинство E_STRICT ошибки сгенерированы во время компиляции, не время выполнения. При увеличении ошибочного уровня до E_ALL в коде (а не через [1 110] php.ini ), Вы никогда не можете видеть E_STRICT ошибки так или иначе.
  2. E_STRICT содержится в E_ALL под PHP 6, но не под PHP 5. Если Вы обновите свой сервер до PHP6 и иметь E_ALL настроенный, как описано в № 1 выше, Вы начнете видеть E_STRICT ошибки, не требуя никаких дополнительных изменений с Вашей стороны.
1
ответ дан A J 28 November 2019 в 01:17
поделиться

ini_set ("display_errors", "2"); ERROR_REPORTING (E_ALL);

-1
ответ дан Tim Boland 28 November 2019 в 01:17
поделиться

Не строго говоря error_reporting, я настоятельно рекомендовал бы использовать любой IDE, который автоматически показывает ошибки анализа и общие незначительные сбои (например, присвоение в условии).

Studio зенда для Eclipse включили эту функцию по умолчанию, и так как я начал использовать его, это помогало мне много при фиксации ошибок, прежде чем они произойдут.

Например, у меня была эта часть кода, где я кэшировал некоторые данные в $GLOBALS переменная, но я непреднамеренно записал $_GLOBALS вместо этого. Данные никогда не кэшировались, и я, никогда не буду не знал, не сказал ли Пехлеви мне: "Эй, это $_GLOBALS штука появляется только однажды, который мог бы быть ошибкой".

0
ответ дан Pablo Borowicz 28 November 2019 в 01:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: